- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: ATtiny2313 + USART = am verzweifeln :-(

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.11.2006
    Ort
    Buxtehude
    Beiträge
    57

    ATtiny2313 + USART = am verzweifeln :-(

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    Bekomme es mit dem ATtiny2313 einfach nicht hin Daten an den PC zusenden [-(

    Es soll eine 8-N-1 Verbindung mit einem 9600 Baud sein.

    Hier mein bisheriger Code:

    Code:
    #include <avr/io.h>
    
    
    #define F_CPU 7372800 // 7,3728 Mhz
    
    #include <util/delay.h> 
    
    #define UART_BAUD_RATE 9600
    #define UART_BAUD_CALC(UART_BAUD_RATE,F_CPU) ((F_CPU)/((UART_BAUD_RATE)*16l)-1)
    
    
    
    
    void usart_putc(unsigned char c) 
    {
       	// warten bis UDR bereit ist
    	while(!(UCSRA & (1 << UDRE)));
    	UDR = c;   // sende Zeichen
    }
    
    int main(void)
    {
    
    	UCSRC = (1<<USBS)|(3<<UCSZ0); 
    	UCSRB = (1 << TXEN);
    	
    	UBRRH = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
    	UBRRL = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
    	
    	while(1)
    	{
    		usart_putc('M');
    		_delay_ms(300);
    	}
    }
    Es kommt einfach garnichts an...

    Hardware scheint aber ok zu sein, wenn ich den Controller aus dem Sockel entferne und TX/RX Verbinde, empfängt der PC das was er auch sendet...

    Schonmal vielen Dank

    Gruß
    Dirk

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2006
    Ort
    Feldkirch
    Alter
    39
    Beiträge
    14
    im datenblatt steht, dass wenn USBS=1 ist, zwei stop bits verwendet werden. du möchtest doch nur 1 Stopbit. ändere das mal.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.11.2006
    Ort
    Buxtehude
    Beiträge
    57
    Hab nun nur UCSRC = (3<<UCSZ0); passiert aber leider noch immer nichts

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Mal ne blöde Frage,
    nen Schnittstellenwandler, MAX 232 oder Transistorschaltung hast Du schon zwischen dem Tiny und dem PC ?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.09.2006
    Ort
    Feldkirch
    Alter
    39
    Beiträge
    14
    schreib anstatt: UCSRC = (1<<USBS)|(3<<UCSZ0);
    UCSRB = (1 << TXEN);

    dies: UCSRC |= (1<<USBS)|(3<<UCSZ0);
    UCSRB |= (1 << TXEN);

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    06.11.2006
    Ort
    Buxtehude
    Beiträge
    57
    bringt leider nichts...

    @wkrug:
    verwende einen MAX232.

    Hab nochmal ein Screenshot von den Fuse Bits angehängt.. kann es evtl auch daran liegen?

    weiter oben ist noch ein Haken bei:
    "Serial programm downloading"
    "Brown-out detection disabled"
    "Divide clock by 8 internally"

    //EDIT: hatte bei früheren Versuchen bei UBRRH und UBRRL mal irgendetwas reingeschrieben. dann wurde wilder Zeichensalat gesendet.. Evtl die Berechnung falsch?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken neu-1.png  

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Es könnte das schuld sein "Divide clock by 8 internally" da wird doch der Takt durch 8 geteilt.

    Hubert

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    06.11.2006
    Ort
    Buxtehude
    Beiträge
    57
    YEAH es geht nun

    @Hubert.G: es lag wirklich an dem "Divide clock by 8 internally"

    VIELEN DANK an euch alle

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad