Sida 4 av 4

Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR

Postat: 16 mars 2012, 11:15:24
av jesse
Ja, jag läste också den delen av databladet och uppfattar det precis som du har gjort. Men kan det vara så att de skrivit fel? Ibland beräknas checksumma på andra sätt, tex. att man summerar alla bytena, även checksumman, och resultatet ska då bli noll. Eller att man utgår från ett annat startvärde än 0. Eftersom det fungerar bra när du struntar i checksumman och att du faktiskt sparar det nya resultatet i samband med att byte 8 (checksumman) läses in så bevisar det ju i alla fall all det faktiskt kommer in en byte där. Fast den byten kan ju likaväl vara första byte i nästa sekvens. Hur lång paus är det mellan sekvenserna? Prova att tända lysdioden när du läst in byte 7 och släck den när du läser in checksumman, så ser du om det verkligen sänds en checksumma direkt efter byte 7.

Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR

Postat: 16 mars 2012, 12:44:53
av labmaster
Hej Glattnos!

När det dyker upp den här typen av fel kan det vara lite komplicerat att ha många att rådfråga eftersom råden kan kastas huller om buller i många olika riktningar.

Det var ett tag sedan jag jobbade med AVR så jag minns inte hur det är med intrruptsekvensen. Kolla om det kan komma ett avbrott mitt i avbrottsrutinen. I så fall kan det blir lite struligt om kompilatorn har lagt Checksum i en minnesarea som återanvänds i varje avbrott.

Ett tips är att du kollar programkoden jag postade tidigare som jag kallar "State Machine". Där ser du hur jag åtgärdat eventuella problem med flera nästlade avbrott. Kan du dessutom mentalt ta dig över tröskeln för mitt förslag så tror jag det blir bättre för dig på sikt än att du hänger kvar vid din lösning med switch-sats i avbrottrutinen.

Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR

Postat: 16 mars 2012, 16:21:10
av Glattnos
Men ååååå!

Det saknas "break" i "case 7" :oops: så det var aldrig Checksum som kontrollerades, utan det var fortfarande byte 7 som låg i RecivedByte.

Man kan få leta ihjäl sig bara för att hitta ett sådant litet trams-fel :mrgreen:

Tack för alla förslag och all hjälp! För tillfället kommer jag vidare :tumupp:

Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR

Postat: 16 mars 2012, 18:29:48
av jesse
hehe :D

Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR

Postat: 16 mars 2012, 19:08:51
av Nerre
Just såna där fel kan man ofta undvika genom att hålla sig strikt till strukturerad kodning, typ att använda JSP eller liknande.

Jag har inte tittat så noga på kodexemplen i tråden, men ofta så kan man överlåta optimeringen till kompilatorn och skriva lång "övertydlig" kod som kompilatorn sen ändå optimerar till samma korta kod som man kan fått om man hade "skrivit assembler i C" så att säga.