Hi @ all Ich benutze ein ATMega32. Dieser bekommt einen externen Takt über einen Quarzoscillator (16MHz). Der Takt ist am Port XTAL1 angeschlossen. Der Port XTAL2 ist nicht belegt. Ich habe eine Programm geschrieben, dass ich mit Hilfe des ATMEL-Boards STK500 auf meienen eigene Platine übertrage. Die Programmierung des ATMEGA32 wird ohne Fehlermeldung abgeschlossen. Anschließend läuft das Programm auch ohne weitere Problem. Wenn ich jedoch das Programmierkabel abziehe und den µP resete, dann funktioniert das Programm nicht mehr. Das Programm soll fogendes machen: Es initialisiert das Display. Anschließend wird der Text "Welcome in HL" ausgegeben. Danach läuft eine Endlosschleife, die die Zahl 1 bis 8 ausgibt. Anschließend wird das Dipslay gelöscht und die Zahl 1 bis 8 wird erneut ausgegeben. Wenn der Atmel zurückgesetzt wird, dann steht auf dem Display nichts. Was habe ich falsch gemacht? Hier mein Programm: #include <mega32.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B #endasm #include <lcd.h> #include <stdio.h> #include <delay.h> // Declare your global variables here void main(void) { delay_ms(1000); // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTA=0x00; DDRA=0xFF; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // LCD module initialization delay_ms(1000); lcd_init(20); // go on the second LCD line lcd_gotoxy(3,0); // display the message lcd_putsf("Welcome in HL"); delay_ms(2000); while (1) { // Place your code here lcd_clear(); delay_ms(300); lcd_gotoxy(3,1); delay_ms(300); lcd_putsf("1"); delay_ms(300); lcd_putsf("2"); delay_ms(300); lcd_putsf("3"); delay_ms(300); lcd_putsf("4"); delay_ms(300); lcd_putsf("5"); delay_ms(300); lcd_putsf("6"); delay_ms(300); lcd_putsf("7"); delay_ms(300); lcd_putsf("8"); delay_ms(300); }; }
Hi, vielleicht fehlt eine Versorgungsspannung oder Masse, die der µC beim Programmieren über den Adapter bekommt.
Wenn das Programmierkabel angeschlossen ist, dann funktioniert es und wenn ich es abziehe, dann nicht mehr. Der Fehler sieht wie folgt aus: Programm funktioniert richt: In der ersten Zeile wird Welcome in HL dargestellt anschließend werden die Zahlen in der 2. Reihe dargestellt. (ist die While-Schleife) Programm funktioniert nicht: In der ersten Zeile wird Welcome in HL dargestellt anschließend werden die Zahlen in der 1. Reihe dargestellt. (ist die While-Schleife) --> er springt nicht in die zweite Zeile, obwohl nichts am Quellcode geändert wurde. Wenn der Stecker dann wieder draufgesteckt wird springt er in die zweite Zeile und stellt dort die Zahlen da. Ziehe ich den Stecker aus, dann springt er sofort in die obere Zeile. Diese Fehler ist reproduzierbar.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.