Atmega88 --> AT90S2333

#828142
Lesenswert?

Guten abend allerseits

Ein simples Gerät, das zur Zeit an ca. 50 Oertlichkeiten anstandslos 
sein Dasein fristet.
Nun hat der Kunde eine kleine Nachbestellung getaetigt. Da ich aber hier 
in der Türkei keine Atmega88 auftreiben kann, und wegen den paar Stück 
keine Bestellung in Deutschland aufgeben will, dachte ich mir, ich setze 
anstelle von Atmega88 den AT90S2333 ein, von denen ich noch etliche auf 
Lager habe.
Nachdem ich alle LCD relevanten Daten ins Eeprom ausgelagert, soweit als 
möglich alle globalen Variablen gestrichen und da und dort was 
umgestellt habe, ist es mir gelungen, das Ganze fehlerfrei zu 
compilieren.
Flash: 98% full
Eeeprom: 93% full
Data: 16% full

Nur: es funktioniert nicht. Weder auf der Hardware, noch im Simulator 
(AVR Studio 4.13 SP2).
Sobald ich den globalen Interrupt freigebe (main.c Zeile 187), startet 
der Simulator wieder von vorne, so als haette es einen Reset gebeben.
Wenn ich aber als MCU den Atmega88 eintrage, dann laeuft es ohne 
Probleme: sowohl im Simulator, als auch auf der Hardware.
Der einzige Unterschied: Atmega88 lauft mit internem 8MHz Oszilator, der 
AT90S2333 mit ext. 4MHz Resonator.

Beiliegen die Sourcen.

Dank im voraus.


Eine kleine Notiz am Rande: In meiner Verzweiflung habe ich auch 
versucht, das Ganze auf den Imagecraft Compiler (Vers. 6.31A mit 
Code-Compression) umzuschreiben. Aber das beste Resultat waren 2100 
Bytes, also ca. 103%.
Angehängte Dateien:
Moderator Persönliche Seite #828331
Lesenswert?

Hmm, ich finde erstmal keinen offensichtlichen Fehler.  Habe mir auch
mal ein AVR Studio gesucht und versucht, mich in dessen Bedienung
reinzufinden.  Davon abgesehen, dass der Simulator dort keinen
AT90S2333 mehr kennen will und ich den AT90S4433 ausgewählt habe (der
meiner Meinung nach binärkompatibel sein sollte), läuft das bei mir.
Nach dem sei() wird als nächstes in die ISR TIMER0_OVF_vect verzweigt.

Du könntest ja _vector_default mal auf einen RETI legen. Wenn's dann
geht, muss bei dir irgendein Interrupt aktiviert sein, der keine ISR
hat.  Ich finde aber nichts, weder bei der Inspektion des Binärcodes
noch finde ich in der Registeranzeige bei AVR Studio ein anderes
Interruptflag als das für den Überlauf von Timer 0.

Da ich vermutlich eine andere Compilerversion habe als du, hänge ich
mein Hexfile nochmal dran.
Angehängte Dateien:
#828403
Lesenswert?

Mann o Mann, ist mir das peinlich.
Ich hab' also mein ICE200 gefunden. Den 23333 aus dem Sockel genommen 
... und was seh' ich da: Pin 1 (also RESET) war verbogen und hatte 
vermutlich Wackelkontakt.

Es tut mir schrecklich leid. "Quelle bruit pour une omelette ..."
Zu Deiner "Genugtuung": ich reisse mir schon seit 4 Tagen an diesem 
Problem die Haare aus.

Aber auf die Frage, warum es im Simulator nicht funktioniert, habe ich 
keine Antwort.
Gast #828487
Lesenswert?

>Ein verbogenes IC-Beinchen kann einem auch bei neuen Controllern
>passieren..

Schon. Nur, wenn das Programm nicht umgeschrieben worden wäre, hätte 
Mehmet
dies sehr schnell gefunden.
Gemeiner sind die Effekte, die sich auf Grund 'alter Technik' ergeben 
können: BOD verhält sich anders, EEPROM-Inhalt ist nicht stabil, ...
Damit kann man sich u.U. stundenlang beschäftigen, was dann deutlich 
aufwendiger wird, als ein paar Euro für Porto+Verpackung.

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