- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: großes problem bei seriellen übertragung!!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.01.2005
    Ort
    Gr.St.Florian
    Alter
    38
    Beiträge
    42

    großes problem bei seriellen übertragung!!

    Anzeige

    Praxistest und DIY Projekte
    hallo leute!

    Ich habe ein großes problem bei der programmierung der seriellen übertragung auf den pc. ich verwende einen atmega32 und als programmiersoftware CodeVisionAVR.
    überall im internet bzw. datenblatt finde ich folgendes programm:

    void USART_Transmit( )
    {
    while ( !( UCSRA & (1<<UDRE)) );
    UDR = '3';
    }

    Das problem dabei ist,dass es bei mir nicht funktioniert. Ich kann das UDRE bit so nicht ansprechen. Es ist das fünfte bit im register UCSRA. Bei mir im CodeVision muss ich das bit mit UCSRA.5 ansprechen. Aber auch so funktioniert das nicht.
    Vl habt ihr eine Idee wie ich das lösen kann.

    ich hab mich damit sehr viel beschäftigt.
    und hab es auch so probiert:

    void USART_Transmit()
    {
    while (!(UCSRA & 0x20));
    UDR = '3';
    }

    aber auch so hats nicht geklappt!

    wär cool,wenn ihr mit helfen könntet.

    glg kati

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    20.01.2005
    Ort
    Gr.St.Florian
    Alter
    38
    Beiträge
    42
    also i hab jetzt das programm ausgebessert. und des schaut jetzt so aus:

    void USART_Transmit1()
    {
    while ( !( UCSRA & (1<<UCSRA.5)) );
    UDR = 3;

    }

    aber er geht aus der while schleife net raus. Habs im avrstudio simuliert und bin dabei drauf gekommen.

    gesetzt sand mein sachen richtig, zumindest brauch ich sie so...
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;

    i bin so ratlos und net mal meine lehrer können sich dabei aus :-/

    glg

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo katiiiiii

    Ich finde so mahl kein Fehler in deinem Code.

    Nicht aus Schleife: while ( !( UCSRA & (1<<UDRE)) );
    kommen scheint mir als ob die Transmitter (UCSRB TXEN) irgendwo nicht eingeschaltet ist.

    Poste mahl dein Code


    Gruss

    Henk

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    20.01.2005
    Ort
    Gr.St.Florian
    Alter
    38
    Beiträge
    42
    Das Problem ist ja, dass i UDRE net einfach so ansprechen kann. UDRE ist ein bit aus dem register UCSRA. i muss des, aber so ansprechen UCSRA.5. weil es das fünfte bit im register ist..

    mein code ist hier angehängt...
    danke
    Angehängte Dateien Angehängte Dateien

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo katiiiiii

    Dein code lauft bei mir ohne Problehmen in ein Atema8L (in ein ASURO Roboter) 2400 baud (UBRRL=0xCF stat 0x33).

    Vielleicht sollte

    1.
    void USART_Transmit()
    geanderd werden in
    void USART_Transmit(void)
    2.
    void main(void)
    in
    int main(void)
    3.
    return 0;
    als letzte im main()
    4.
    UDRE statt UCSRA.5
    5.
    ein prototype von USART_Transmit() zugefugt werden.

    Probier mahl dieses Program (ohne etwas zu zufugen)



    Code:
    #include <mega32.h>
    
    //function prototype declaration
    void USART_Transmit(void);
    
    void USART_Transmit(void)
    {
    	while ( !( UCSRA & (1<<UDRE)) ); 
    	UDR = 3;
    }
    
    
    int main(void)
    {
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    
    
    while (1)
          {
      
            
        	USART_Transmit();
          
          };
    
    return 0;
    
    }

    bin gespannt

    Gruss

    Henk

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    20.01.2005
    Ort
    Gr.St.Florian
    Alter
    38
    Beiträge
    42
    hi!
    hi!

    leider erkennt er schon beim compilieren das UDRE nicht. ich kann das bit so nicht ansprechen. es kommt die fehlermeldung "undefinded symbol". ich hab herausgefunden, dass es nur mit UCSRA.5 geht. da hab i zumindest keine fehlermeldung mehr, aber es geht halt trotzdem net ;-/

    mfg
    kati

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo Kati,

    wenigstens

    while ( !( UCSRA & (1<<0x20)) );

    sollte auch gehen,

    oder vielleicht ist dein Atmega32 kaput? (Snif..)

    oder wie Kontrolierst du dass 'es nicht geht'?
    Wie weisst du dass das Program hangen bleibt?
    Vielleicht liegt das Problehm irgend anderswo.

    Gruss

    Henk

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    20.01.2005
    Ort
    Gr.St.Florian
    Alter
    38
    Beiträge
    42
    hi!

    i glaub net das der atmega32 kaputt ist. wir haben erst einen neuen kaufen müssen, weil wir fusebits gesetzt haben.
    naja, durch das AVRStudio kann i mei Programm simulieren und schaun, obs geht. i mein i bin mir net sicher, ob des so stimmt wie i des mach. aber mei lehrer hat mir des zeigt.

    aber i werd deinen vorschlag später no ausprobieren.
    danke!

    mfg
    kati

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    20.01.2005
    Ort
    Gr.St.Florian
    Alter
    38
    Beiträge
    42
    hi!

    leider geht die übertragung so a net

    mfg
    kati

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    37
    Beiträge
    215
    Kati include mal die io.h auch noch. Besonders seit dem neuen WinAVR hat ich ohne die einige Probleme. Vielleicht ists ja beim CodeVision auch deswegen. Ist mir nur aufgefallen weil bei beiden Codes von euch die io.h nich included war.
    Gruß Muraad

    EDIT:
    Mir ist es grad aufgefallen du hast nach der while() anweisung die {} Klammern vergessen also:
    Code:
    void USART_transmit (unsigned char c) {
    	while (!(UCSRA & (1<<UCSRA.5))) {} <--- Die Klammern da
    	UDR = c;
    }
    Deswegen bleibt er auch da auch hängen denk ich.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress