Asm. Funderingar hos en nybörjare.
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
Skriver ett nytt inlägg så detta syns.
Jag programmerar med en wisp628. Har ej PICKit eller liknande.
AndersG, länk nr två funkar ej.
Jag programmerar med en wisp628. Har ej PICKit eller liknande.
AndersG, länk nr två funkar ej.
- Swech
- EF Sponsor
- Inlägg: 4743
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Asm. Funderingar hos en nybörjare.
De flesta encoders har inte snäppläge. Men då är de heller inte tänkta som panelval utan
för att räkna position på t.ex. en motor.
Oavsett - poängen var att det är lite lurigt med encoders. Det är lätt att det blir fel.
Det viktigaste då man skriver program är att man inte antar att allt funkar klockrent
utan att programmet även kan hantera då signaler m.m. inte uppför sig som tänkt.
Swech
för att räkna position på t.ex. en motor.
Oavsett - poängen var att det är lite lurigt med encoders. Det är lätt att det blir fel.
Det viktigaste då man skriver program är att man inte antar att allt funkar klockrent
utan att programmet även kan hantera då signaler m.m. inte uppför sig som tänkt.
Swech
Re: Asm. Funderingar hos en nybörjare.
I det aktuella fallet (alltså i denna tråd) så handlar det om encoder
för manuell inmatning. Och de encoders som då är aktuella har nästan
alltid snäpp-lägen. Dessutom är inte en missad läsning då och då
något problem vid manuell "in-rattning", men vrider bara en bråkdel
av ett varv längre och användaren kommer i de flesta fall aldrig
att märka att koden missade ett "snäpp" i alla fall...
En guide för en 16F84/16F84A (som AndersG länkade till) är i alla fall
bättre en en guide för en "Base Line" modell. 16F84/16F84A är ju
en "Mid Range" modell precis som praktiskt taget alla andra PIC16
modeller. Så arkitekturmässigt så är den OK. Det som skiljer är att
den saknar en del finesser (timers, USARTs o.s.v) så en del lösningar
på en 16F84A är kanske inte så som man hade gjort det på en modernare
processor.
Men, som sagt, för att lära sig ASM grunderna så är den mycket bättre
en en 12F509 (eller någon annan "Base Line")...
för manuell inmatning. Och de encoders som då är aktuella har nästan
alltid snäpp-lägen. Dessutom är inte en missad läsning då och då
något problem vid manuell "in-rattning", men vrider bara en bråkdel
av ett varv längre och användaren kommer i de flesta fall aldrig
att märka att koden missade ett "snäpp" i alla fall...
En guide för en 16F84/16F84A (som AndersG länkade till) är i alla fall
bättre en en guide för en "Base Line" modell. 16F84/16F84A är ju
en "Mid Range" modell precis som praktiskt taget alla andra PIC16
modeller. Så arkitekturmässigt så är den OK. Det som skiljer är att
den saknar en del finesser (timers, USARTs o.s.v) så en del lösningar
på en 16F84A är kanske inte så som man hade gjort det på en modernare
processor.
Men, som sagt, för att lära sig ASM grunderna så är den mycket bättre
en en 12F509 (eller någon annan "Base Line")...
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
I kameratimer 0.1.0 så skippar jag nog en rotary encoder och kör med två helt vanliga tryckknappar. Bara för att ni skall slippa träta om encodern! 

Re: Asm. Funderingar hos en nybörjare.
Bra ! Då kan vi träta om "debouncing" istället... 
Men annars så håller jag med om att du kan vänta med
encodern ett tag. Sedan, när du blir nyfiken på det, så
har jag ett gäng liggandes på kontoret...

Men annars så håller jag med om att du kan vänta med
encodern ett tag. Sedan, när du blir nyfiken på det, så
har jag ett gäng liggandes på kontoret...

- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
Debouncing ja.. Sånt skall man ju och så tänka på.. Suck
Det börjar kännas som att jag beslutat mig för att bestiga MtEverest, i badbyxor. 


- Swech
- EF Sponsor
- Inlägg: 4743
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Asm. Funderingar hos en nybörjare.
Det är ingen som träter
vi har bara en liten diskussion.
Hur kul är det med ett forum om alla håller med och är överens.....
Du får väl börja med det lokala berget... d.v.s blinka lite med lysdioder
Så skall vi nog få upp dig för mt everest då tiden är mogen
Swech

Hur kul är det med ett forum om alla håller med och är överens.....

Du får väl börja med det lokala berget... d.v.s blinka lite med lysdioder
Så skall vi nog få upp dig för mt everest då tiden är mogen
Swech
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
Ni får träta hur mycket ni vill! 
Saken är den att jag redan har blinkat med lysdioder. Så det är inte roligt längre.
Jag vill bygga något som jag har användning för, därav detta projekt.
Jag har nu iaf ritat upp på papper hur jag skall fördela pinnarna.
Jag borde då kunna lura ut hur jag skall börja mitt program. Och ställa alla pinnar som I/O allt efter hur det ser ut.
Sen antar jag att jag får googla lite på debouncing.

Saken är den att jag redan har blinkat med lysdioder. Så det är inte roligt längre.
Jag vill bygga något som jag har användning för, därav detta projekt.
Jag har nu iaf ritat upp på papper hur jag skall fördela pinnarna.
Jag borde då kunna lura ut hur jag skall börja mitt program. Och ställa alla pinnar som I/O allt efter hur det ser ut.
Sen antar jag att jag får googla lite på debouncing.

Re: Asm. Funderingar hos en nybörjare.
OK.
Börja med att definiera funktionen uppifrån/utifrån.
Vad är det den ska göra ? o.s.v...
Sedan testar du de detaljer som du är osäker på i separata småprogram.
Samtidigt funderar du på hur "stommen" i programmet ska se ut med t.ex
en grundläggande timerrutin som du sedan kan använda här och där. Detta
utgör "pulsen", "andningen" (eller vad man vill likna det med) i hela applikationen.
Jag minns inte exakt vad det var du ville göra, men en sådan "grundpuls" kan t.ex
vara 10-100 ms eller liknande. Det får avgöras av vilken upplösning man vill ha
generellt. Denna grundpuls används sedan till debouncing, tidtagning, whatever.
Rutiner för knappar (bygger sannolikt på ovanstående "puls").
Rutiner för eventuell LCD.
O.s.v.
Slutligen syr du ihop det hela till en fungerande helhet.
Men som sagt, börja med att definiera målet, sedan fixar du
detaljerna. Med detta klart blir det rellativt enkelt att sy ihop
helheten på slutet.
Ett vanligt fel är att man börjar bygga Den Slutgiltiga Lösningen
direkt, och sedan sitter man där med en massa kod och med
skitsaker som inte fungerar (kontaktstudsar och liknande). Mycket
enklare att reda ut som först i separata experiment/labb kodersnuttar
Börja med att definiera funktionen uppifrån/utifrån.
Vad är det den ska göra ? o.s.v...
Sedan testar du de detaljer som du är osäker på i separata småprogram.
Samtidigt funderar du på hur "stommen" i programmet ska se ut med t.ex
en grundläggande timerrutin som du sedan kan använda här och där. Detta
utgör "pulsen", "andningen" (eller vad man vill likna det med) i hela applikationen.
Jag minns inte exakt vad det var du ville göra, men en sådan "grundpuls" kan t.ex
vara 10-100 ms eller liknande. Det får avgöras av vilken upplösning man vill ha
generellt. Denna grundpuls används sedan till debouncing, tidtagning, whatever.
Rutiner för knappar (bygger sannolikt på ovanstående "puls").
Rutiner för eventuell LCD.
O.s.v.
Slutligen syr du ihop det hela till en fungerande helhet.
Men som sagt, börja med att definiera målet, sedan fixar du
detaljerna. Med detta klart blir det rellativt enkelt att sy ihop
helheten på slutet.
Ett vanligt fel är att man börjar bygga Den Slutgiltiga Lösningen
direkt, och sedan sitter man där med en massa kod och med
skitsaker som inte fungerar (kontaktstudsar och liknande). Mycket
enklare att reda ut som först i separata experiment/labb kodersnuttar
Re: Asm. Funderingar hos en nybörjare.
OK. Jag formulerar om: "De flesta enkoders tänkta för inmatning (till skillnad från positionering) har snäpplägen"De flesta encoders har inte snäppläge. Men då är de heller inte tänkta som panelval utan
för att räkna position på t.ex. en motor.
Absolut, "do nothing gracefully" etc. Men i dfet här fallet så klippte jag kod från en existrande app där koden enbart var avsedd att hantera en alps EC-12 enkoder. Den koden är givetvis ej så lämplig att användas för andra. Det kan tom hända att det är enklare att använda de färdiga ICs som finns för detta ändamål.Oavsett - poängen var att det är lite lurigt med encoders. Det är lätt att det blir fel.
Det viktigaste då man skriver program är att man inte antar att allt funkar klockrent
utan att programmet även kan hantera då signaler m.m. inte uppför sig som tänkt.
Länken nummer två:
http://www.microchip.com/stellent/idcpl ... e=en023805
(Längst ned på sisdan)
- Swech
- EF Sponsor
- Inlägg: 4743
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Asm. Funderingar hos en nybörjare.
Det enda du behöver ändra i din kod är att den räknar på båda flankerna....
Ta bara bort den där knepiga delayen som du har
samt ta bort kollen om vilken flank det är.
Resultatpulspositionen delar du med 2... och vips har du en kod som alltid funkar
Swech
Ta bara bort den där knepiga delayen som du har
samt ta bort kollen om vilken flank det är.
Resultatpulspositionen delar du med 2... och vips har du en kod som alltid funkar

Swech
Re: Asm. Funderingar hos en nybörjare.
OK. Noterat, dock ligger det ganska lågt ner på listan.
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
Jag tillbringade flera timmar igår på att försöka förstå mig på hur jag räknar med TIMER0 och Prescaler. Utan att komma fram till något. Jag håller på att bli tokig!
Jag fick fram en formel som lyder fout= fclk / Presc(256-TMR0)Count
Vad syftar Count på?
Sedan när jag gjorde mer efterforskningar så var det någonstans det stod att jag skulle ta fclk / 4*Presc(256-TMR0)Count.
Vad är det som gäller?
Man hade kunnat önska att denna formel fanns med i databladet på picen. Eller har jag bara missat den?
Närmre sex timmar i går helt utan resultat. Suck.
Jag fick fram en formel som lyder fout= fclk / Presc(256-TMR0)Count
Vad syftar Count på?
Sedan när jag gjorde mer efterforskningar så var det någonstans det stod att jag skulle ta fclk / 4*Presc(256-TMR0)Count.
Vad är det som gäller?
Man hade kunnat önska att denna formel fanns med i databladet på picen. Eller har jag bara missat den?
Närmre sex timmar i går helt utan resultat. Suck.

Re: Asm. Funderingar hos en nybörjare.
Vilken PIC gäller det ? Låt oss anta att det är 16F688...
Men generellt så delar bara prescalern ner insignalen till timern med valbar faktor.
Figur 5-1 visar hur Timer0 hänger ihop.
Prescaler sätts mellan 1:2 till 1:256 via bitarna PS0-2 i OPTION_REG.
Sen så räknar bara Timer0 ner, från vad du nu har satt den till, till 0 då
TOIF sätts (och ett interrupt triggas om du har enablat det).
> Sedan när jag gjorde mer efterforskningar...
Vardå och varför då ? Allt du behover finns i kapitel "5.0 TIMER0 MODULE".
Det är enklare om du mer konkret talar om vad det är där som är oklart.
Men generellt så delar bara prescalern ner insignalen till timern med valbar faktor.
Figur 5-1 visar hur Timer0 hänger ihop.
Prescaler sätts mellan 1:2 till 1:256 via bitarna PS0-2 i OPTION_REG.
Sen så räknar bara Timer0 ner, från vad du nu har satt den till, till 0 då
TOIF sätts (och ett interrupt triggas om du har enablat det).
> Sedan när jag gjorde mer efterforskningar...
Vardå och varför då ? Allt du behover finns i kapitel "5.0 TIMER0 MODULE".
Det är enklare om du mer konkret talar om vad det är där som är oklart.
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
Jag blev inte något klokare av det där tyvärr.
Det jag vill göra är att få en timer eller man kanske skall kalla det ett delay på 1Hz.
Säg att jag använder en extern kristall på 4MHz
Ja, jag förutsätter nu att jag använder PIC16F688.
EDIT:
Jag har förstått sen tidigare att man sätter prescaler i OPTION_REG. Det glömde jag att säga.
Det jag undrar är helt enkelt hur jag räknar fram en viss frekvens. Beroende på hur man ställer TMR0 så kan man få interupten vid olika tidpunkter. OM jag har förstått rätt.
Det jag vill göra är att få en timer eller man kanske skall kalla det ett delay på 1Hz.
Säg att jag använder en extern kristall på 4MHz
Ja, jag förutsätter nu att jag använder PIC16F688.
EDIT:
Jag har förstått sen tidigare att man sätter prescaler i OPTION_REG. Det glömde jag att säga.
Det jag undrar är helt enkelt hur jag räknar fram en viss frekvens. Beroende på hur man ställer TMR0 så kan man få interupten vid olika tidpunkter. OM jag har förstått rätt.