- Labornetzteil AliExpress         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 37

Thema: Usart programmierung

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647

    Usart programmierung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,

    Ich möchte mit meinem Atmega128 daten zum Pc senden und zwar über die RS232 schnitte.

    Jetzt habe ich im Datenblatt nachgelesen wie das geht und diese Source samples in mein Programm eingebaut aber ständig kommt beim compilieren das die usart variablen "first use in this function" sind. kann mir da jemand weiterhelfen? ich habe als include dateien avr/io.h und string.h.

    mein code sieht also so aus:

    Code:
    #include <avr/io.h>
    #include <string.h>
    
    void USART_Init (unsigned int baud)
    {
    /* Set baud rate */
    	UBRRH = (unsigned char)(baud>>8);
    	UBRRL = (unsigned char)baud;
    /* Enable reciever and transmitter */
    	UCSRB = (1<<RXEN)|(1<<Txen);
    /* Set frame format: 8data, 2stop bit*/
    	UCSRC = (1<<USBS)|(3<<UCSZ0=;
    }
    
    
    
    void USART_Transmit (unsigned char data)
    {
    /* Wait for empty transmit buffer */
    	while(!(UCSRA & (1<<UDRE)))
    ;
    /* Put data into buffer, sends the data '/
    	UDR = data;
    }
    
    
    unsigned char USART_Recieve(void)
    {
    /* Wait for data to be recieved */
    	while (!(UCSRA & (1<<RXC)))
    ;
    /* Get and return recieved data from buffer */
    	return UDR;
    }
    Danke schonmal für eure hilfreichen Antworten

    MFG DanielSan
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Hast Du den Prozessortyp im makefile richtig gesetzt? Ansonsten werden die #defines in io.h nicht richtig abgearbeitet.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Ich programmiere ihn mit AVR studio. Das Problem tritt ja schon beim compilieren auf, nicht erst wenn ich das prog im prozessor habe.

    MFG
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Wenn Du den Prozessortyp (auch im AVR-Studio) nicht richtig setzt, werden die #defines in io.h bei der Auswertung nicht zum richtigen Ergebnis führen:

    Code:
    #elif defined (__AVR_ATmega128__)
    Dann bekommst Du die Fehlermeldung.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Also in meiner configuration steht das ich den mega128 mit 16Mhz eingestellt habe. Und als fehlermeldungkommt:




    rm -rf usart.o usart.elf dep/ usart.hex usart.eep
    Build succeeded with 0 Warnings...
    avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -DF_CPU=16000000 -O0 -fsigned-char -Wp,-M,-MP,-MT,usart.o,-MF,dep/usart.o.d -c ../usart.c
    ../usart.c: In function `__vector_1':
    ../usart.c:45: error: `GICR' undeclared (first use in this function)
    ../usart.c:45: error: (Each undeclared identifier is reported only once
    ../usart.c:45: error: for each function it appears in.)
    ../usart.c: In function `__vector_16':
    ../usart.c:102: error: `GIFR' undeclared (first use in this function)
    ../usart.c:103: error: `GICR' undeclared (first use in this function)
    ../usart.c: In function `main':
    ../usart.c:181: error: `UCSRA' undeclared (first use in this function)
    ../usart.c:182: error: `UCSRB' undeclared (first use in this function)
    ../usart.c:189: error: `GIFR' undeclared (first use in this function)
    ../usart.c:190: error: `GICR' undeclared (first use in this function)
    make: *** [usart.o] Error 1
    Build failed with 9 errors and 0 warnings...





    Ich hoffe das hilft dir weiter um mir zu helfen

    MFG DanielSan[/img]
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    kann er ja auch nicht finden, weil der Mega 128 die Register nicht besitzt. Wie kommt man darauf:

    In der Installation des WinAVR unter
    avr\include\avr\iom128.h nachschauen und nach den Namen suchen: Kein Treffer.

    Warum ist das so?
    Der 128 hat zwei serielle Schnittstellen, damit heissen die seriellen Register: UCSR0A und UCSR0B bzw. UCSR1A und UCSR1B, etc.

    GICR und GIFR scheinen Interruptregister zu sein. Auf jeden Fall ist der Code den Du da hast nicht für den Mega128 geschrieben worden. Welche Bedeutung die Register haben musst Du im Datenblatt des Chips nachlesen , für den der Code ursprünglich war und dann durch die entsprechenden Register - sofern vorhanden - des 128 ersetzen.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    ok diese programm ist für den mega128 zumindest habe ich diesen code aus dem datenblatt des mega128.

    Code:
    #include <inttypes.h> 
    #include <avr/io.h> 
    #include <avr/signal.h> 
    #include <string.h> 
    
    void USART_Init (unsigned int baud)
    {
    /* Set baud rate */
    	UBRRH = (unsigned char)(baud>>8);
    	UBRRL = (unsigned char)baud;
    /* Enable reciever and transmitter */
    	UCSRB = (1<<RXEN)|(1<<Txen);
    /* Set frame format: 8data, 2stop bit*/
    	UCSRC = (1<<USBS)|(3<<UCSZ0=;
    }
    
    
    
    void USART_Transmit (unsigned char data)
    {
    /* Wait for empty transmit buffer */
    	while(!(UCSRA & (1<<UDRE)))
    ;
    /* Put data into buffer, sends the data '/
    	UDR = data;
    }
    
    
    unsigned char USART_Recieve(void)
    {
    /* Wait for data to be recieved */
    	while (!(UCSRA & (1<<RXC)))
    ;
    /* Get and return recieved data from buffer */
    	return UDR;
    }

    und wenn ich das compile kommen folgende fehlermeldungen:

    Build started 7.2.2006 at 11:14:26
    avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -DF_CPU=16000000 -O0 -fsigned-char -Wp,-M,-MP,-MT,usart.o,-MF,dep/usart.o.d -c ../usart.c
    ../usart.c: In function `USART_Init':
    ../usart.c:11: error: `UBRRH' undeclared (first use in this function)
    ../usart.c:11: error: (Each undeclared identifier is reported only once
    ../usart.c:11: error: for each function it appears in.)
    ../usart.c:12: error: `UBRRL' undeclared (first use in this function)
    ../usart.c:14: error: `UCSRB' undeclared (first use in this function)
    ../usart.c:14: error: `Txen' undeclared (first use in this function)
    ../usart.c:16: error: `UCSRC' undeclared (first use in this function)
    ../usart.c:16: error: parse error before ';' token
    ../usart.c:34: error: `UCSRA' undeclared (first use in this function)
    ../usart.c:37: error: `UDR' undeclared (first use in this function)
    ../usart.c:37: warning: `return' with a value, in function returning void
    make: *** [usart.o] Error 1
    Build failed with 10 errors and 1 warnings...


    MFG Danielsan
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Die Beispiele im Datenblatt passen nicht immer zum Chip. Ist ein altbekanntes Problem. Die richtigen Namen für die Register findest Du in den entsprechenden Abschnitten des Datenblatts (nicht in den Codebeispielen).

    Du wirst also nicht um eine Anpassung des Codes kommen. Im Zweifelsfall immer in den Header-Dateien nachschauen.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2003
    Ort
    Alfeld (50km südl. Hannover)
    Alter
    40
    Beiträge
    237
    Hi,

    ../usart.c:11: error: `UBRRH1' undeclared (first use in this function)
    hab grad mal durch die iom128.h gegrept, gibts nicht wegen der zwei
    Uarts heißt's da:
    UBRR1H oder UBRR0H
    das gleiche für UCSRB:
    #define UCSR0B _SFR_IO8(0x0A)
    #define UCSR1B _SFR_MEM8(0x9A)
    jeweils für UART0 und 1

    Txen: ist eine Konstante wird also groß geschrieben: TXEN.

    Schau dir mal die iom128.h an.


    mfg
    Thorsten
    Open Minds. Open Sources. Open Future

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Mh ok das hat mich schon weitergebracht jetzt habe ichs geschafft die fehlermeldungen auf das hier zu reduzieren:

    Build started 7.2.2006 at 11:37:42
    avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -DF_CPU=16000000 -O0 -fsigned-char -Wp,-M,-MP,-MT,usart.o,-MF,dep/usart.o.d -c ../usart.c
    ../usart.c: In function `USART_Transmit':
    ../usart.c:36: warning: `return' with a value, in function returning void
    avr-gcc -mmcu=atmega128 usart.o -o usart.elf
    C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/lib/avr5/crtm128.o(.init9+0x0): undefined reference to `main'
    make: *** [usart.elf] Error 1
    Build failed with 1 errors and 1 warnings...


    Also ist ja nur noch hier irgendwas falsch:

    C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/lib/avr5/crtm128.o(.init9+0x0): undefined reference to `main'


    ich kenne mich leider nicht genug aus um zu verstehen was da falsch ist.

    MFG Danielsan
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen