Forum: Mikrocontroller und Digitale Elektronik Austausch: Atmega8 auf Atmega168


von matze (Gast)


Lesenswert?

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

von g457 (Gast)


Lesenswert?

> Hat jemand eine Idee an was das liegen könnte?

Fehler im Quellcode (den Du nicht gezeigt hast), falsche Fuses oder ganz 
einfach Sonnenwinde.

von Thomas E. (thomase)


Lesenswert?

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.

von matze (Gast)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

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.

von matze (Gast)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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

von matze (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.