Hallo ich hab ein komisches Problem, vielleicht könnt ihr helfen. habe mir ein STK500 zugelegt und gleich mal mit GCC das Testprogramm, welches im User Guide in Assembler geschrieen steht in C geschrieben und im AVR-Studio simuliert. dann die HEX-Datei in den ATMega16 geschrieben. Aber nix tut sich ... absolut nichts. Ich finde einfach nicht den Fehler. Also wie schon gesagt ich verwende einen ATmega16 mit internen RC-Oszillator mit 1MHz. zur Kontrolle hatte ich das Orginal-Programm-Hexfile von Atmel reingeschrieben und alles funzte auf anhieb. Könnt ihr mir helfen?!
Poste mal das ASM-Programm - vielleicht macht die Portierung nach C was anderes, als dein C-Programm.
Welches ASM brauchst du jetzt von mir? das, das ich in C übersetzt habe, oder ... die Übersetzung meines Compilers?
Also hier hab ich erstmal die Übersetzung von GCC zu meinem C Programm. das Orginal ASM Programm liefer ich noch nach. Sollte aber im Netz zu finden sein.
So hier das Orginaltestprog vom STK500 in ASM. wäre echt supi wenn von euch jemand den Fehler entdeckt. Ist halt auch sehr eigenartig, weil die Simulation astrein funktioniert. Nur nicht im ATMEGA. best regards littlecb
Du musst anstelle von KEYPORT natürlich KEYPIN einlesen. Sonst funktioniert gar nichts. Eine andere Sache ist, dass das C-Programm etwas anderes macht als das Assembler-Programm. Im Assembler-Programm werden die Bits vom Port einzeln abgefragt, während das C-Programm den gesamten Port auf einen bestimmten Zustand hin abfragt.
1 | sbis PIND, 0x00 |
fragt ab, ob das Bit Nr. 0 im Portregister gesetzt ist, während die Zustände aller anderen Bits im Portregister ignoriert werden.
1 | if(PINx == 0b11111110){} |
allerdings fragt ab, ob das Bit Nr. 0 "0" ist und alle anderen Bits im Register "1". Das kann nur funktionieren, wenn immer nur ein Taster betätigt wird. Mehrere Taster gleichzeitig gehen schief.
1 | if(!(PINx & (1 << 0))){} |
macht das, was im Assembler-Code vorgesehen ist. Ansonsten schau bitte mal ins AVR-GCC-Tutorial.
Hallo Johannes, super Hinweise von Dir. Werd ich heut nach der Arbeit gleich mal ausprobieren. Als du das mit den PINx abfragen erklärt hast fiel mir es wie Schuppen von den Augen. Also ich meld mich was draus wird. Danke nochmals. best regard littlecb
Hi Johannes, hattest den absoluten Volltreffer! g PIN statt PORT bei Zustandsabfrage ... geändert => sofort funktioniert! :-D best THX Christian
littlecb wrote:
> hattest den absoluten Volltreffer! *g*
Ach was... Hattest Du daran gezweifelt? Hinfort mit Dir, Ungläubiger:-!
Ist doch hoffentlich klar, dass es mit PORTx nicht klappen KANN, weil
sich das Register ohne Eingriff des Programms selbst nicht ändern kann.
Nur PINx spiegelt wider, was tatsächlich an den Portpins los ist.
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.