Lars schrieb:
> Hallo, ich habe bei meinem Atmega16 gerade ein recht seltsames Problem.
> Das überspielen meines Testprogramms funktioniert noch, allerdings
> beginnt der µC danach nicht wie gewohnt mit der Programmabarbeitung.
> Da ich in diesem Projekt, das erste Mal mit einem Schwingquarz (16 MHz)
> hantiere, wäre es auch denkbar, dass das Fehlverhalten durch falsch
> eingestellte Fusebits kommt.
Da gibt es eigentlich nur 2 Möglichkeiten
Entweder der Quarz ist aktiv oder er ist nicht aktiv, weil du falsch
gefused hast.
Da würde ich doch mal ein noch einfacheres Testprogramm vorschlagen.
Denn bei deinem muss schon allerhand korrekt funktionieren, damit du am
LCD eine Ausgabe siehst.
Das allereinfachste Testprogramm ist eine LED mit _delay_ms blinken
lassen.
1 | #define F_CPU 16000000
|
2 | #include <avr/io.h>
|
3 | #include <util/delay.h>
|
4 |
|
5 | #define LED_DDR DDRD
|
6 | #define LED_PORT PORTD
|
7 | #define LED_PIN PD7
|
8 |
|
9 | int main()
|
10 | {
|
11 | LED_DDR |= ( 1 << LED_PIN );
|
12 |
|
13 | while( 1 ) {
|
14 | LED_PORT |= ( 1 << LED_PIN );
|
15 | _delay_ms( 1000 );
|
16 | LED_PORT &= ~( 1 << LED_PIN );
|
17 | _delay_ms( 1000 );
|
18 | }
|
19 | }
|
Mit diesem Programm (die LED Werte bei den #define einsetzen), muss
deine LED im 1 Sekundentakt an und aus gehen. Tut sie das, ist alles in
Ordnung. Dein QUarz ist per Fuse aktiv und versorgt den µC auch mit
Takten.
Ist die LED aber 16 Sekunden an/aus (also gegebenenfalls etwas warten),
dann läuft der µC immer noch mit 1Mhz.
Tut sich 1 Minute überhaupt nichts an der LED, dann hast du höchst
wahrscheinlich deinen µC verfust und musst sehen, dass du ihn mit einem
externen Takt wieder zur Kooperation überredest.
Blinkt deine LED allerdings richtig und tut sich danach immer noch
nichts am LCD, dann wird wohl im LCD Code irgendein Problem vorliegen.
Meistens sind das irgendwelche Timingsachen, so dass das LCD zeitlich
überfahren wird.