ATMega128 Uart0

Gast #3112470
Lesenswert?

Hallo,

habe ein kleines Problem mit den UART.
Ich möchte an der UART0 Schnittstelle (RX=PE0 TX=PE1) ein GPS Modul 
(navilock 552ETTL)anschließen. Also Atmel RX mit GPS TX verbinden. Das 
ist leider auch die ISP Programmierschnittstelle, der andere UART wird 
leider schon für was anderes benutzt. Da das GPS Modul die Daten 
zyklisch von alleine sendet brauche ich ja nur RX. Das Problem ist halt 
ich empfange nichts.

Ich muß natürlich den Atmel über die ISP-Programmieren können,
kann man die Schnittstelle trotzdem als UART benutzen (Ich meine 
natürlich nicht zeitgleich)?

Wenn Ja, was muss man bei der Fuse Konfiguration beachten?

Ein weiteres Problem ist der Pegel der Atmel wird mit 5V betrieben und 
das GPS Modul hat einen 3,3V Pegel. Braucht man hier einen Pegelwander 
oder geht das auch ohne?


1
#define F_CPU 14745600UL
2
#define GPS_BAUD 38400UL      // baud rate
3
#define GPS_UBRR_VAL ((F_CPU+GPS_BAUD*8)/(GPS_BAUD*16)-1)
4
#define GPS_BAUD_REAL (F_CPU/(16*(GPS_UBRR_VAL+1)))
5
#define GPS_BAUD_ERROR ((GPS_BAUD_REAL*1000)/GPS_BAUD)
6

7
#if ((GPS_BAUD_ERROR<990) || (GPS_BAUD_ERROR>1010))
8
#error Systematischer Fehler der GPS Baudrate groesser 1% und damit zu hoch! 
9
#endif
10

11
#define BV(bit) _BV(bit)
12
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  // Clear bit
13
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // Set bit
14

15
// GPS - UART
16
#define GPS_UART_BAUDRATE 38400
17
#define GPS_UART_DDR      DDRE
18
#define GPS_UART_PORT     PORTE
19
#define GPS_UART_RXPIN    PIN0
20
#define GPS_UART_TXPIN    PIN1
21
#define GPS_RX_vect       USART0_RX_vect
22

23

24
SIGNAL(GPS_RX_vect)
25
{
26
  uint8_t data;
27
  data = (uint8_t)UDR0;
28
  // data parsen....
29
}
30

31
void GPS_Init()
32
{
33
        cli(); // Deaktiviert die Interrupt für die Konfiguration
34
  
35
  // RX - Pin für das Empfangen von Daten
36
  cbi(GPS_UART_DDR, GPS_UART_RXPIN); // Eingang
37
    
38
  // Konfiguriert die Baudrate 38400
39
  UBRR0H = GPS_UBRR_VAL >> 8; 
40
  UBRR0L = GPS_UBRR_VAL & 0xFF;  
41
  
42
  // Aktiviert RX und den RX-Interrupt
43
  UCSR0B = (1<<RXEN0) | (1<<RXCIE);
44
  
45
  // UART Konfiguration: 8N1
46
  UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
47
  UCSR0A &= ~(1<<U2X0); //Disable 2x speed 
48
  
49
  sei(); // Aktiviert die Interrupts wieder
50
}
#3112478
Lesenswert?

Müller schrieb:
> kann man die Schnittstelle trotzdem als UART benutzen (Ich meine
> natürlich nicht zeitgleich)?
Ja

> Wenn Ja, was muss man bei der Fuse Konfiguration beachten?
Nein


> Ein weiteres Problem ist der Pegel der Atmel wird mit 5V betrieben und
> das GPS Modul hat einen 3,3V Pegel. Braucht man hier einen Pegelwander
> oder geht das auch ohne?
Für das Empfangen geht auch ohne da der Atmega einen Pegel > 0.6*VCC ja 
auch als High erkennt. Nur solltest du einen Ausgang vom Atmel zum GPS 
Modul nicht direkt anschließen, außer das GPS-Modul hat 5V tolerante 
Pins

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren