Forum: Mikrocontroller und Digitale Elektronik FT232RL mit Attiny841


von Tiny841 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe hier einen Attiny841 mit einem Ft232RL verbunden.
Nun möchte ich Daten darüber austauschen, allerdings bekomme ich keine 
richtigen Werte zurück bzw. Empfange ich nur Müll.
Ich habe jetzt schon verschiedene Sachen ausprobiert, aber irgendwie 
bekomme ich es nicht hin. Wahrscheinlich ist es ein ganz einfacher 
Fehler ...

Hier einmal der Code für die USART Routinen:
1
void USART_Init( uint16_t baudrate )
2
{
3
  REMAP |= (1<<U0MAP);
4
  /* Set baud rate */ 
5
  UBRR0H = (baudrate>>8); 
6
  UBRR0L = baudrate;
7
  /* Enable receiver and transmitter */
8
  UCSR0B |= (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0);
9
  /* Set frame format: 8data, 2stop bit */
10
  UCSR0C |= (1<<UPM01) | (1<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00);
11
}
12
13
void USART_Transmit( uint8_t data )
14
{
15
  /* Wait for empty transmit buffer */
16
  while ( !( UCSR0A & (1<<UDRE0)) );
17
  /* Put data into buffer, sends the data */
18
  UDR0 = data;
19
}
20
21
uint8_t USART_Receive( void )
22
{
23
  /* Wait for data to be received */
24
  while ( !(UCSR0A & (1<<RXC0)) );
25
  /* Get and return received data from buffer */
26
  return UDR0;
27
}

und noch meine Initialisierung und die Main Routine:
1
int main(void)
2
{
3
    init();
4
    while (1) 
5
    {
6
  USART_Transmit(55);
7
    }
8
}
9
10
void init(void)
11
{
12
  cli();
13
  USART_Init(64);
14
  sei();
15
}
Eigentlich stammen die USART Routinen aus dem Datenblatt und müssten so 
funktionieren.

Zurück bekomme ich eine dezimale 63, obwohl es ja eigentlich eine 55 
sein sollte.
Der Attiny läuft mit 10MHz.

Danke

von Benjamin M. (berkutta)


Lesenswert?

Hi,

Sieht so aus wie wenn du ein durcheinander mit polling/interrupt machst. 
Du hast das USART zwar auf Interrupt konfiguiert, jedoch keine Interrupt 
Routine, dafür eine polling Routine. Daher am besten mal versuchen den 
Interrupt Modus zu deaktivieren (RXCIE0 flag entfernen).

von holger (Gast)


Lesenswert?

>Zurück bekomme ich eine dezimale 63, obwohl es ja eigentlich eine 55
>sein sollte.

Falsche Baudrate weil vermutlich die Taktfrequenz nicht stimmt.

>Der Attiny läuft mit 10MHz.

Hast du das auch mal mit einer blinkenden LED geprüft?

von holger (Gast)


Lesenswert?

>    while (1)
>    {
>  USART_Transmit(55);
>    }

Mach da mal ein Delay rein, sonst weiss der FT bei dem
rumgeballer ja gar nicht mehr wo ein Startbit kommt.

von Tiny841 (Gast)


Lesenswert?

Danke,
jetzt bekomme ich schonmal dauerhaft Daten, allerdings ist es immer noch 
nicht die 55 die ich erwarte, sondern 0,128,128 und dann wieder in der 
gleichen Reihenfolge...

von Tiny841 (Gast)


Lesenswert?

Habe das mit der Taktfrequenz gerade überprüft indem ich den internen 
Oszillator gewählt habe und den UBRR Wert geändert habe.
Allerdings bekomme ich immer noch die selben Werte zurück.
Delay ist jetzt auch mit 10ms vorhanden, allerdings bringt das auch 
nichts, nur das der FT nicht mehr so gequält wird :D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.