Räkna ut skillnad på två kompass-kurser? Assembler AVR
Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR
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
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.
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
Men ååååå!
Det saknas "break" i "case 7"
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
Tack för alla förslag och all hjälp! För tillfället kommer jag vidare
Det saknas "break" i "case 7"

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

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

Re: Räkna ut skillnad på två kompass-kurser? Assembler AVR
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.
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.