Austausch: Atmega8 auf Atmega168

Gast #2071174
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
Gast #2071215
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
#2071246
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.
Gast #2071281
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren