Author |
Topic |
swede
Member
1091 Posts |
Posted - 2003/03/03 : 15:39:06
|
Gott!
Får prova när jag kommer hem!
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
loovet
Member
354 Posts |
Posted - 2003/03/03 : 20:53:54
|
Hej Magnus,
har precis beställt en P16PRO programerare.
Vad tror du om att använda följande program tillsammans med den:
www.ic-prog.com
Enligt någon site jag var inne på så skall det fungera. Och det bästa av allt programmet är gratis...
/loovet |
// det blev en aleph 1.7 // |
|
|
CF
Member
63 Posts |
Posted - 2003/03/03 : 21:00:17
|
Det nämda programmet fungerar bra med ludipipo programmeraren. Ställ in ic-prog på JDM programer.
///CF |
|
|
loovet
Member
354 Posts |
Posted - 2003/03/03 : 22:16:01
|
Man kan väl säga att den "ludipipo" programerare som du gav förslag på är mycket enkel i sin konstruktion. Tror att även jag får ta och pröva mig på den någon dag då jag får lite tid över.
En bra länk på kretskortslayout m m.
http://hjem.get2net.dk/koch/per/pic.htm
/loovet |
// det blev en aleph 1.7 // |
Edited by - loovet on 2003/03/03 22:18:11 |
|
|
Lash
Member
814 Posts |
Posted - 2003/03/03 : 22:48:10
|
Hur går det för er andra med programeringen? Det verkar på det som ni skriver som ni snart är färdiga, själv har jag inte kommit längre än hur man får en lysdiod o blinka. Använder ni assembler? Eller det kanske inte finns något annat språk till pic-processorer. Vilka andra program använder ni som är bra att ha, typ PICemulatoer och allt vad det kan vara. Jag har bara provat på microships eget mplab, men har bara kollat runt i det lite. |
Edited by - Lash on 2003/03/03 22:49:36 |
|
|
Freddie
Member
322 Posts |
Posted - 2003/03/03 : 22:54:25
|
Lash,
Programmeringen är väl så gott som klar för mig. Lägger in IR rutinerna sedan, i övrigt så är programmet klart. Jag skriver i C (www.bknd.com)
/Freddie |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/03 : 23:30:56
|
Hmmm... vad är det för skillnad mellan CC5X free edition och den som kostar pengar?
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
epkpeng
400.000-klubben
4228 Posts |
Posted - 2003/03/03 : 23:31:34
|
Nu e jag ju självklart införstådd i att det ÄR en del jobb med att bygga ett försteg eller slutsteg som DIY'are...
Men är det NÅN som är klar med en Nelson P? Nån som har bilder? Nån som har lyssningsintryck???
// Pär, utan att låta sur... |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/03 : 23:39:39
|
loovet: Var läste du att man kunde använda IC-prog till P16PRO? Jag får det inte att fungera...
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/03 : 23:41:55
|
epkpeng: Jag använder min dagligen, dock är inte volymkontrollen färdig än. Jag tycker det låter helt ok. Vet inte vad jag skall jämföra med. Har inte gjort några blindtester. Får lura hit min polare Max, med ett annat försteg och göra lite jämförande tester.
Freddie: Jag läste lite dåligt... Det verkar som att man kan koda upp till 1024 instruktioner med gratisvarianten av C-kompilatorn. Duger nog gott åt mig.
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
loovet
Member
354 Posts |
|
Lash
Member
814 Posts |
Posted - 2003/03/04 : 13:13:51
|
Kör ni andra med C eller assembler? |
|
|
Freddie
Member
322 Posts |
Posted - 2003/03/04 : 16:48:11
|
quote: Freddie: Jag läste lite dåligt... Det verkar som att man kan koda upp till 1024 instruktioner med gratisvarianten av C-kompilatorn. Duger nog gott åt mig.
Jo.. 1024 instruktioner räcker en stund. Jag kör själv med gratisvarianten, programmet ligger väl på ca 650 instruktioner för tillfället. Men det inkluderar saker till VF-Displayen, volymkontroll, ingångsväljare, lagring av saker i eeprom osv. Ett program som bara läser av pulsgivaren och presenterar resultatet på en port hamnar under 100 instruktioner.
/Freddie |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/04 : 18:49:35
|
Gott,
Då skall jag kolla in den (kompilatorn alltså). Den verkar ganska rättfram.
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/05 : 08:55:16
|
Det går långsamt, men framåt... ;=) Nu har jag fått igång mitt shift-register. Nästa steg är att mata utgångarna från shift-registret till en 8-bitars-latch. Efter det, skall jag ge mig på "rotary encodern". Jag har inte så mycket tid över, men kom fram till att jag kan effektivisera min tid på morgonen, genom att koda assembler samtidigt som jag käkar fukost. ;=)
Det måste ju nästan betyda att jag börjar bli hard core. Assembler till frukost. ;=)
Godans gott, //magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/06 : 09:10:13
|
Och nu fungerar latchen...
Små steg, men ändå framåt. Idag skall jag ge mig på rotary encodern, om jag inte går på ishockey, vill säga. Fy tusan vad dålig hockey de har här nere. Inte riktigt i klass med Frölunda och Djurgården. Mer som svensk division II damhockey.
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
Lash
Member
814 Posts |
Posted - 2003/03/06 : 13:30:56
|
Vart hittar du info om elfas rotary encoder? Deras pdf innehöll ju inte mycket. |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/06 : 13:36:32
|
Tja, det beror ju på vilken av dem du kollar på... Men om det är den här: http://www.elfa.se/pdf/35/03584745.pdf, så är det inte mycket du behöver titta på. Jag provade lite hemma och fick det hela att fungera.
Tricket är att koppla in pullup-motstånd mellan +5v och ben A och B. C kopplar du till jord. A och B kopplar du dessutom till din PIC. Sen är det bara att polla ingången med jämna mellanrum och jämföra med föregående pollning.
Förresten... Jag fick igång koden till min rotary encoder. Nu skall jag bygga reläkort...
//magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
Lash
Member
814 Posts |
Posted - 2003/03/06 : 14:53:46
|
Ok, men det står inget A,B eller C på min enconder, det är samma encoder som på pdfen. Det är tre stift på den plus två som är på encoderschasiet.
Encodern ger pulser av något slag på dom pinnar den är kopplad på, så mycket har jag förstått. Men hur vet PICen vilken som är vänster-puls och högerpuls? Ger den puls på ena pinnen åt vänster och puls på den andra åt höger? Kan du klistra in en snutt av just den koden så kanske jag förstår enklare hur det fungerar(kör du assembler?). |
Edited by - Lash on 2003/03/06 15:01:10 |
|
|
swede
Member
1091 Posts |
Posted - 2003/03/06 : 16:47:55
|
Tjenare,
Om du vänder upp och ner på encodern så ser den ut så här:
-A-B-C | | o o | | ------
Där o är pinnarna på chassit. Jag får klistra in lite kod när jag kommer hem, för jag har inte tillgång till den på jobbet. Signalen som du får på A och B (när du kopplat C till jord och använder dig av "pull-up" motstånd) ger riktningen. Beroende på "vinkeln" på pinnen på encodern, så kommer du få ut fyra olika "state":
Pulståg "medurs".
A B --------- 0 0 0 1 1 1 1 0
Du ser riktningen genom att jämföra föregående poll med nuvarande. Låt oss säga att "förra" mätningen på benen gav (AB=01). Om den nya mätningen ger (AB=11) så vet du att man roterat pinnen medurs. Om däremot den nya mätningen ger (AB=00) så vet du att det är moturs.
Jag postar min kod (mycket rörig) senare.
Pseudokod (fiktiv kod) i C-liknande språk kan se ut så här:
quote:
while (true) { curr = poll(ROTARY_INPUT); // current reading
if ( curr != prev ) { if ( ( curr == 0b00 && prev == 0b01 ) || // listing all "inc" ( curr == 0b10 && prev == 0b00 ) || // transitions ( curr == 0b11 && prev == 0b10 ) || ( curr == 0b01 && prev == 0b11 ) ) { increase_volume(); } else // if not any of the increasing transitions // it has to be "dec" transition // or an illegal transition { decrease_volume(); }
prev = curr; } sleep(SLEEP_TIME) // sleep for a few microseconds }
Lycka till, //magnus |
perl -ne'chomp;$a.=pack"b*",$_;END{print"\n$a\n\n"}'<<RM 10000010001101101010011000001110000101100000010001001110 101011100011011010100110110011101000010001010000 RM |
|
|
loovet
Member
354 Posts |
Posted - 2003/03/06 : 18:24:45
|
Hej Magnus,
skulle du vilja utveckla det där med "pull-up" motstånd och hur man kopplar encodern till PIC:en. Jag trodde nämligen att man kopplade A och B på encoder direkt till PIC:en, men jag verkar ha fel någon stans.
Skulle det inte vara möjligt att lägga A på en interrupt port och sedan stämma av om B antingen är 0 eller 1 och på så sätt veta om man vrider åt höger eller vänster. Då behöver man ju inte lagra något i minnet. Skulle detta vara möjligt?
/loovet |
// det blev en aleph 1.7 // |
Edited by - loovet on 2003/03/06 18:28:38 |
|
|
Freddie
Member
322 Posts |
Posted - 2003/03/06 : 19:57:11
|
loovet, du måste ha pullup motstånd på A och B. PIC16F874:an som jag kör med har inbyggda pull-up motstånd vilka lätt tas fram genom att ställa ett register, kommer inte ihåg om PIC16F84:an också har det dock.
|
|
|
Lash
Member
814 Posts |
Posted - 2003/03/06 : 20:06:00
|
Om man använder PIC16F87x, ska man inte ha några motstånd där då? Hur ska man då koppla? Ska picen vara inställd på ingång eller utgång på dom pinnar man sätter encodern på? Och vad gör pullup motstånd? |
Edited by - Lash on 2003/03/06 20:06:22 |
|
|
Nagref
Member
113 Posts |
Posted - 2003/03/06 : 20:17:46
|
16F84 har pullupmotstånd på alla ben i portB om man nollställer bit 7 i OPTION-registret.
Lash: ingång! Och pullupmotstånden gör så att när man inte har något kopplat till just det benet så tolkas det som en etta (hög spänning). Pulsgivaren kopplar bara ner mot jord (nolla) eller inte alls (och då blir det en etta av pullupmotstånden som sitter i mikrokontrollern. |
Assisterar Holographic Audio och Larsen Hifi VD för Acoustic Landscape R&D-ansvarig för Acoustic Illusion |
|
|
loovet
Member
354 Posts |
Posted - 2003/03/06 : 22:03:57
|
Nu tror jag att jag börjar att förstå lite... (eller inte)
Om jag använder mig av 16F84 och sätter alla ben i portB med pullupmostdånd och kopplar encoderns ben A mot RB0 och ben B mot RB1. Och sedan använder RB0 som interrupt och sedan bara kollar av RB1 om den är 0 eller 1, i samband med att interrupten aktiveras, borde jag väl kunna utläsa, utifrån värdet på RB1 om jag vrider encodern åt höger eller vänster, eller?
/loovet
|
// det blev en aleph 1.7 // |
|
|
Topic |
|