- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 6 von 6

Thema: Problem mit Fleury UART lib und Mega644 ...

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Gleich vorweg: Ich kann's auch nicht erklären. Weil ich aber nun schon Zeit investiert habe, möchte ich meine Erkenntnisse wenigstens auch mitteilen.

    Mein erster Verdacht: Ein Dual-USART mit dem die Peter Fleury-Lib nicht zurecht kommt. Da ich aber nur ein Mega64er-Datenblatt auf der Platte hatte, wollte ich zuerst einen Blick in das 644er-Datenblatt werfen. Zweiter Verdacht: Zugriff auf die falschen Register. Aber die Definitionen in uart.c scheint unverdächtig, weil eben vorhanden und auf den ersten Blick auch richtig:

    Code:
    #elif defined(__AVR_ATmega644__)
     /* ATmega with one USART */
     #define ATMEGA_USART0
     #define UART0_RECEIVE_INTERRUPT   SIG_USART_RECV
     #define UART0_TRANSMIT_INTERRUPT  SIG_USART_DATA
     #define UART0_STATUS   UCSR0A
     #define UART0_CONTROL  UCSR0B
     #define UART0_DATA     UDR0
     #define UART0_UDRIE    UDRIE0
    #elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__)
     /* ATmega with two USART */
     #define ATMEGA_USART0
     #define ATMEGA_USART1
     #define UART0_RECEIVE_INTERRUPT   SIG_USART_RECV
     #define UART1_RECEIVE_INTERRUPT   SIG_USART1_RECV
     #define UART0_TRANSMIT_INTERRUPT  SIG_USART_DATA
     #define UART1_TRANSMIT_INTERRUPT  SIG_USART1_DATA
     #define UART0_STATUS   UCSR0A
     #define UART0_CONTROL  UCSR0B
     #define UART0_DATA     UDR0
     #define UART0_UDRIE    UDRIE0
     #define UART1_STATUS   UCSR1A
     #define UART1_CONTROL  UCSR1B
     #define UART1_DATA     UDR1
     #define UART1_UDRIE    UDRIE1
    (Aus uart.c)

    Was mir noch auffällt: Meine Datei uart.c stammt vom 29.11.2009 und ist die neuste Datei im Archiv. Die 644er-Definitionen sind die Letzten in der Datei und möglicherweise in deiner "schon immer verwendeten" Version nicht vorhanden/fehlerhaft.

    Welcher 664er ist es denn?
    http://www.atmel.com/dyn/products/de...ource=left_nav

    Gruß

    mic

    P.S.:
    Die Sende-ISR könnte auch ein Kandidat sein.

    Noch ein Edit:
    "Die bytes 0-255 kommen sauber an (bei 57600baud), das 'a' auch, das "test" nicht." ist doch klar. Das Senden geschieht asyncron über einen Ringpuffer und der Sende-ISR. Beim "T" von "Test" ist Schluß mit lustig:

    Code:
     uart_puts_p("test");
     while (1)
     {}
    }
    Ich bin mir nicht sicher, würde aber eher ein ; nach while machen. Bauchgefühlsmäßig.
    Geändert von radbruch (07.11.2011 um 19:03 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    48
    Beiträge
    685
    Moin!

    Ich habe den 644 ohne 'P', also mit einem USART, und die Bibliothek habe ich zwischendurch frisch heruntergeladen. das while-dingens ist ein Rest, es spielt keine Rolle, an welcher Stelle ich das uart_puts_p verwende....
    ich habe das testweise in ener Endlosschleife laufen lassen, für das letzte 'test' kommen immer die selben 4 (falschen) bytes an, als würde der Controller Murks lesen, oder evtl. auch schon vorher schreiben, der Rest funktioniert ja....
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von vklaffehn
    Ich habe die Bibliothek jetzt schon auf verschiedenen Controllern benutzt, aber noch nie auf dem 644, und hatte nie Probleme damit....
    Tja, dann hast du dort (im Gegensatz zu hier) wohl die richtige Funktion (eigentlich Makro) benutzt.
    Entweder
    Code:
    uart_puts_p(PSTR("text"));
    oder
    Code:
    uart_puts_P("text");
    Aber bei
    Code:
    uart_puts_p("text");
    liegt der Text im RAM, und dann liest die Funktion natürlich Müll aus dem Flash.
    MfG
    Stefan

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Danke, wieder mal was gelernt:

    Code:
    /**
     * @brief    Put string from program memory to ringbuffer for transmitting via UART.
     *
     * The string is buffered by the UART library in a circular buffer
     * and one character at a time is transmitted to the UART using interrupts.
     * Blocks if it can not write the whole string into the circular buffer.
     *
     * @param    s program memory string to be transmitted
     * @return   none
     * @see      uart_puts_P
     */
    extern void uart_puts_p(const char *s );
    
    /**
     * @brief    Macro to automatically put a string constant into program memory
     */
    #define uart_puts_P(__s)       uart_puts_p(PSTR(__s))
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    48
    Beiträge
    685
    Arg.

    Danke. Da ich immer die zweite Variante benutzt habe, war mir überhaupt nicht bewußt, dass es das Makro auch mit kleinem 'p' gibt.... Hätte da nicht mal ein warning kommen können ?

    Auf alle Fälle vielen Dank, jetzt kann ich mich endlich wieder dem Bluetoothmoduk widmen!

    MfG
    Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

Ähnliche Themen

  1. Timer0 und UART Lib Fleury Timer läuft nicht mehr los
    Von gesamtplan im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 21.03.2011, 18:23
  2. UART mit Fleury Library
    Von MT2009 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 20.06.2010, 16:20
  3. Bug in der UART bei Mega644 und Mega644P?
    Von benkly im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 26.04.2009, 15:08
  4. Uart Problem mit Mega644 und Mega644P
    Von jozefowicz im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 23.02.2009, 19:19
  5. ATMEGA8/UART/FLEURY
    Von rico65 im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 01.11.2006, 09:20

Berechtigungen

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

LiFePO4 Speicher Test