Forum: Mikrocontroller und Digitale Elektronik Programm startet nach Reset nicht


von Michael (Gast)


Lesenswert?

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);
      };
}

von Tim H. (howie)


Lesenswert?

Hi,

vielleicht fehlt eine Versorgungsspannung oder Masse, die der µC beim
Programmieren über den Adapter bekommt.

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.