Hallo Zusammen, ich habe noch ein weiteres Problem. Und zwar reicht mir der Speicher beim Atmega8 nicht ganz aus. Deshalb will ich ihn durch einen Atmega168 ersetzen. Im AVRStudio wurde bei Device der Typ ausgewählt, die Fusebits wurden gesetzt und der Code neu compiliert. Allerdings funktioniert das nicht. Im AVRStudio kommen keine Fehlermeldungen. Das Display, das mit dem Atmega8 funktioniert, kann mit dem Atmega168 nicht angesteuert werden. Hat jemand eine Idee an was das liegen könnte? Danke matze
> Hat jemand eine Idee an was das liegen könnte?
Fehler im Quellcode (den Du nicht gezeigt hast), falsche Fuses oder ganz
einfach Sonnenwinde.
matze schrieb: > Hat jemand eine Idee an was das liegen könnte? Der 168 hat andere Register. Das lässt sich gar nicht compilieren. Das Device muss nicht nur in AVR Studio, sondern auch in den Configuration Options des Compilers ausgewählt werden. mfg.
Hi, also ich bin um eine Erkenntnis reicher. Der Controller funktioniert mit dem Code. Allerdings erst, wenn ich einen Hard-Reset macht (Spannung weg). Sobald ein Soft-Reset ausgeführt wurde, läuft er nicht mehr an. Programmieren mit AVRStudio geht aber weiterhin. Gruss matze
matze schrieb: > Hi, also ich bin um eine Erkenntnis reicher. Nein. Bist du nicht. matze schrieb: > Der Controller funktioniert mit dem Code Das ist Zufall. Der Code muss auch für den 168 kompiliert werden, da es sich um zwei Controller handelt, die sich zwar sehr ähnlich, aber nicht gleich sind. Der 168er hat z.B. 23 Interrupts, der 8er nur 19. Im Programmcode liegt hinter den Interruptvektoren die Initialisierung. Da hakt es dann das erste Mal. Deshalb läuft der 168er auch erst nach einem Hardwarerest, da die Initialisierung durch die Software nicht vernünftig ausgeführt wurde. Kompilier das als 168er. Alles andere ist Schwachsinn. mfg.
Hi Thomas, bei der Einstellung für den Compiler habe ich den 168 ausgewählt. Dass ich den Code für den entsprechenden Controller compilieren muss ist mir schon klar. Noch als Info (ich weiss es ist nicht schön gelöst, aber es hat zumindest beim Atmega8 funktioniert): Während das Gerät benutzt wird, kann es sein, dass es über zwei Tasten neu gestartet werden muss, um in einen anderen Modus zu kommen. Hierfür hab ich den Watchdog missbraucht. Werden die beiden Tasten zusammen länger als eine bestimmte Zeit gedrückt, wird der Watchdog aktiviert und es wird in eine Endlosschleife gesprungen.
1 | if(taster1_ein && taster2_ein) |
2 | { |
3 | reset_var++; |
4 | if(reset_var>=2500) |
5 | { |
6 | wdt_enable(WDTO_15MS); |
7 | while(1); |
8 | } |
9 | } |
10 | else |
11 | reset_var=0; |
Wenn dieser Watchdog einmal ausgelöst wurde, startet der Controller nicht mehr. Gruss matze
In diesem Dokument stehen alle Änderungen zwischen dem atmega8 und der atmega48/88/168 reihe AVR094: http://www.atmel.com/dyn/resources/prod_documents/doc2553.pdf
So, ich hab den Fehler, ich hab vergessen, das WDRF-Bit beim Neustart zurückzusetzen. Trotzdem vielen Dank für eure Hilfe. Gruss matze
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.