www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm startet nach Reset nicht


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
      };
}

Autor: Tim H. (howie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.