- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: uart tx führt zu reset

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794

    uart tx führt zu reset

    Anzeige

    Powerstation Test
    Hi,

    ich habe ein seltsames Problem:

    Ich habe einen mega32 mit angeschlossenem max232. Sende ich ein Zeichen, oder eine Zeichenkette, started das Programm des µC neu. (glaube ich zumindest).

    Ablauf:
    void main(void):
    - Setzte LED als an
    - Warte (while(1); )

    uart_rxc interrupt:
    - wenn empfangenes Zeichen = a => Setze LED als aus
    - wenn empfangenes Zeichen = b => Sende '-' zurück.

    Ergebnis:
    Starten (LED ist an), 'a' senden (LED ist aus), 'b' senden (LED geht wieder an)

    Mein Code (relevante teile, led() schaltet nur die LED an/aus):
    Code:
    int main(void)
    {
    	led_init();
    	uart_init();
    	
    	sei();
       led(led2, 1);
    
     	while(1)
    	{
    		
    	}
    }
    
    ISR(USART_RXC_vect)
    {
    	uint8_t c;
    	c = uart_receive();
    
    	if (c == 'a') led(led2, 0);
    	if (c == 's') uart_putc('-');
    }
    
    void uart_putc(uint8_t data)
    {
    	while (!(UCSRA & (1<<UDRE)));
    	UDR = data;
    }
    
    void uart_puts(uint8_t *data)
    {
    	while (*data)
    	{
    		while (!(UCSRA & (1<<UDRE)));
    		UDR = *data;
    		data++;
    	}
    }
    Interessanter weise schickt er den gesamten string bei uart_puts. Die LED geht trotzdem an. Ich weiß nicht mehr weiter und hoffe, ihr könnt mir helfen.

    Gruß, CowZ

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Einen beträchtlicher Teil deines Codes versteckst du woanders...

    Ein RESET wird zB dann ausgelöst, wenn eine nicht-implementierte IRQ getriggert wird.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    vom code fehlt einiges ja, aber ich dachte, das wäre das wichtigste..

    muss ich alle aktivierten interrupts auch als IRQ-Routine haben?

    Wenn ja, kann es daran liegen, dass ich keine TXC routine habe. Werde ich heut nachmittag mal testen.

    Gruß, CowZ

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Wenn eine IRQ getriggert wird, für die keine ISR implementiert ist, dann wird von avr-gcc Code erzeugt, der dann zum RESET-Punkt springt. Das Programm läuft dann also von vorne los, allerdings ohne die Hardware neu zu initialisieren wie bei einem richtigen RESET.
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Hi,

    ok, danke für die Erklärung, hoffe das Problem löst sich so.

    Wenn nicht, melde ich mich nochmal. Vielen Dank schonmal

    edit: grad getestet, läuft wunderbar vielen dank

    Gruß, CowZ

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress