Hallo zusammen,
ich habe gerade ein Programm von einem Atmega8 auf einen Atmega168
gebracht und ein paar Probleme. Das Programm funktioniert in 11 von mir
getesteten Atmega8 in vorgegebener Schaltung zuverlässig.
Angeschlossen sind ein 4x20 LCD im 4bit-Mode, ein Navilock-504TTL
GPS-Empfänger sowie ein I²C-Modul von Maxim. Bascom ist 1.11.9.8.
Das regfile wurde passend auf "m168def.dat" geändert, alle vom Compiler
erzeugten Files gelöscht und neu compiliert.
Auf dem 168er ergibt sich dann folgendes Bild.
Nach dem Start hängt sich der Controller gerne mal weg und kann das
Display nicht initialisieren. Manchmal hängt sich sogar der Watchdog mit
weg. Nach einem Reset läuft das Programm an, das Display zeigt aber
nichts mehr an oder nur wirre Zeichen.
Beim Start des Programms läuft ein Counter in einer einfachen
INCR-Schleife, welche knapp 2 Sekunden läuft und per Watchdog überwacht
wird. In 50% der Fälle läuft diese Schleife allerdings mit nur 10% der
Geschwindigkeit, der WD macht dann einen Reset.
1
Do
2
Start Watchdog
3
Incr Weiter
4
Waitms 100
5
Debounce Pinb.1 , 0 , Settings , Sub
6
Locate 1 , 1
7
Lcd Weiter ; " "
8
Stop Watchdog
9
Loop Until Weiter = 20
Die Fuses sind auf internen Quarz gesetzt, ohne Prescaler. Ich habe mir
den Takt an B.0 ausgeben lassen, auch wenn der Timer zu langsam läuft,
liegt der Takt bei 8Mhz. Brown-Out ist mit 4.3V aktiviert.
Ein weiteres Problem ist das Senden von Strings per Hardware-UART. Ich
sende 5x einen Befehl in einer Schleife und lasse mir den "Count"
ausgeben. Manchmal dauert das nur 1 Sekunde, manchmal 10 Sekunden.
Compiliere ich das Programm wieder für einen Atmega8 und nutze den,
funktioniert alles ohne Probleme.
Programm-Header: