Hallo Leute! Also beschäftige mich jetzt schon längere zeit mit PICs und will jetzt auch mal ein wenig mit AVRs arbeiten! Als Programmiergerät verwende ich den SmartProg von Elnec. Mein erstes kleines Programm schaut genau so aus: include "m16def.inc" Init: ldi r16, 0xFF ;Port B durch Ausgabe von 0xFF ins out DDRB, r16 ;Richtungsregister DDRB als Ausgang konfigurieren ldi r16, 0xFF out PORTB, r16 ;PORTB auf 0xFF setzen -> alle LEDs aus Main: sbi PORTB,0 cbi PORTB,0 rjmp Main Aber es passiert genau garnichts! Am Oszilloskop müsste der PORTB,0 Pin ja ein Rechteckssignal ausgeben oder? Aber er ist nur auf Low! Der 2Mhz Quarz den ich am Chip betreibe schwingt aber schön brav, sieht man im Oszzi. Angehängt habe ich den Screenshot der Fuse bits, da ich mir mit denen nicht so ganz sicher bin ob die so stimmen... Vielleicht könnt ihr mir da mal schnell weiter helfen. Danke MfG Martin W
Hmm Stackpointer!? Was wo wie??? Ich mich nix auskennen mit AVR!!! Ach ja handelt sich um einen ATMEGA161! Danke MfG Martin W
Hallo Martin! Mach mal zwischen sbi PORTB,0 und cbi PORTB,0 ein paar NOPs rein.
Die Nops helfen auch nichts, das oszilloskop müsste übrigens so hohe Frequenzen noch leicht schaffen... MfG Martin W
Ok es geht jetzt! Lag am Quarz! Keine Ahnung wieso aber er hat die 2 Mhz nicht genommen, mit einem 5 Mhz Quarz geht es jetzt! Wann sollte man eigentlich slow rising und fast rising power bei den cksel fuses einstellen? Danke MfG Martin W
Nimm mal die Zeile cbi PORTB,0 raus, und schau, ob der Ausgang dann auf High bleibt.
Der stackpointer müsste egal sein, kommen ja keine calls und ints vor. Mich wundert eher dass obiger source fehlerfrei compiliert wird, vorm include fehlt ein Punkt. Du solltest auch die richtige .def Datei laden, die Portdefinitionen sind zwar gleich, aber vielleicht unterscheiden sich andere Speicherstellen. Ist der obige Code alles oder nimmst du noch andere Initialisierungen vor? grüsse leo9
Hi Nein der Punkt ist nur beim Kopieren verschwunden ;-) also ich bekomme schon eine richtige Hex file! Aber .include "m16def.inc" passt doch für den ATMEGA161 oder nicht? MfG Martin W
sorry, aber ich kann auch nicht alle avrs auswendig, für den mega161 würde ich die m161def.inc verwenden. Die exakten Unterschiede findest du im Datenblatt, möglicherweise unterscheiden sie sich aber durch die Speichergröße und dann wirds zum Stack-Initialisieren wieder wichtig die richtige zu verwenden. grüsse leo9
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.