- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 5 von 5

Thema: ATxmega32a4 ISR Problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.08.2012
    Beiträge
    5

    ATxmega32a4 ISR Problem

    Hallo,
    ich habe ein Problem mit dem Interrupt des ATXmega32A4.
    Ich versuche über eine App einen String zu übermitteln.
    Allerdings Springt der MC einfach nicht in die ISR(meine vermutung)
    Ich habe jetzt ein kleines Programm geschrieben bei dem ich einfach nur das was ich per App schicke
    auf Knopfdruck wieder zurückbekommen sollte aber ich erhalte immer nur einen Lehren String.
    (es soll hier einfach nur 1 Buchstabe zu testzwecken übermittelt werden.)

    Das senden der App funktionier es wurde mit hyperterminal getestet.
    Das senden des MC auf die App wurde auch getestet und funktioniert.
    Nur das Empfangen des MC funktioniert nicht.
    Ich hoffe ihr könnt mir helfen.

    Das Senden und empfangen funktioniert über Bluetooth
    Der C Code ist im Anhang
    MFG
    Angehängte Dateien Angehängte Dateien
    • Dateityp: c L.c (3,6 KB, 13x aufgerufen)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Code:
      int init_usart(){
          // UART Init, see Datasheet
         PORTE.DIRSET = PIN3_bm;
         PORTE.OUTSET = PIN3_bm; 
         PORTE.DIRCLR = PIN2_bm;
        
        USARTE0.BAUDCTRLB = 0x00; 
        USARTE0.BAUDCTRLA = 0x67;                                        // Gewünschte Bautrate 19200(Takt / (2^0 * 16*Baudrate)) – 1 = Wert für das Baudratenregister
                                                                        // Errechnete Bautratenwert 103---> 0x67
    
    
        USARTE0.CTRLB = USART_TXEN_bm | USART_RXEN_bm;            //Empfangen und Senden des USARTs aktivieren
        USARTE0.CTRLA = USART_RXCINTLVL_HI_gc;                    //Rx-Interrupt die höchste Priorität
        //USARTE0.CTRLA |= USART_RXCINTLVL_MED_gc;
        USARTE0.CTRLC = USART_CHSIZE_8BIT_gc;                    // Zeichen grösse auf 8 Bit festlegen
        PORTE.DIR = 0x8;
    könnte an der letzten zeile liegen, Du überschreibst deine Einstellungen von oben.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    30.08.2012
    Beiträge
    5
    Danke für den Tipp hat aber leider nichts geändert.
    Ich erhalte immer noch nur einen leeren String.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    30.08.2012
    Beiträge
    5
    Inzwischen habe ich es geschafft das er in den ISR springt jetzt ist aber trotzdem noch das Problem das ich immer einen leeren String zurück bekomme.

    Es lang an diesem Teil der Initialisierung das der Interrupt nicht funktioniert hat:
    TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
    TCC0.CTRLB = 0x00;
    TCC0.INTCTRLA = 0x03;
    TCC0.PER= 0x85ED;
    hab das jetzt erst mal raus gelöscht da ich es hier nicht brauche.
    Kann mir bitte jemand sagen wie ich das das Auslesen das USARTE0.Data Registers richtig mache ?

  5. #5
    Benutzer Stammmitglied Avatar von porter91
    Registriert seit
    15.07.2012
    Beiträge
    54
    Wenn ich das richtig sehe muss du ein Array anlegen für die empfangegen daten da du ja sonst immer die Variable überschreibst und der Letzte wert im String ist halt eine Null:
    Also ich würde es so machen:

    #define BUFSIZE 20
    uint8_t ring[BUFSIZE];
    volatile uint8_t buf_in = 0;
    uint8_t buf_out = 0;

    ISR(USARTE0_RXC_vect)
    {

    ring[buf_in++] = USARTE0.DATA; // Usart einlesen und in data_Empfangen schreiben
    buf_in %= BUFSIZE;
    }


    in der Main dann

    if (buf_in != buf_out)
    {
    Send_UART(ring[buf_out++]);
    buf_out %= BUFSIZE;
    }

    Jetzt musst du nur noch Sicher stellen das dein String kleiner ist als BUFSIZE

    LG
    Bin gerene bereit Hilfe zu leisten, freue mich wenn auch mir geholfen werden kann.
    Entschuldigt bitte Rechtschreibfehler falls welche vorkommen

Ähnliche Themen

  1. ATXmega32A4 Bluetoothsignal einlesen
    Von Sual im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 07.11.2012, 16:32
  2. Problem Compiler mit ISR Hilfe
    Von Dietmar12 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 02.02.2008, 21:07
  3. Problem mit Timer2 und ISR
    Von stormracer im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.01.2008, 21:44
  4. ISR-Problem!
    Von taylor22 im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 03.07.2007, 16:04
  5. ISR(SIG_OUTPUT_COMPARE0B){} und TCNT0 Problem
    Von Kostja20 im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 27.02.2007, 21:25

Stichworte

Berechtigungen

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

Labornetzteil AliExpress