Atmega 1284p serielle Schnittstelle

Gast #5411326
Lesenswert?

Hallo,

ich habe einen Atmega 1284p und möchte damit die seriellen Daten eines 
GPS-Moduls abgreifen. Den Atmega programmiere per Arduino ISP mit der 
Arduino IDE. Dafür benötige ich die Library NazaDecoder, welche mir die 
Seriellen Daten ausliest und in GPS Koordinaten umwandelt. Mit dem 
normalen Arduino Uno funktioniert das auch problemlos, nur mit dem 
Atmega1284p bekomme ich einfach keine Daten ausgelesen. Ich habe den TX 
Pin vom GPS Modul mit dem RX0 Pin des Atmega verbunden. Wenn das ganze 
mit dem Arduino auslese, verwende ich den RX Pin des Arduino.
Woran kann das liegen? Normalerweise dürfte da doch kein allzu großer 
Unterschied sein zwischen dem Atmega 328 des Arduino und des Atmega 
1284p?

Ich wäre über jede Hilfe sehr Dankbar.
Gast #5411336
Lesenswert?

In der Regel wird die erste UART eines AVR für die Kommunikation zum PC 
genutzt.
Arduino Tradition.
Von daher wundert es mich, dass das beim UNO einfach so funktioniert.

Soweit mir bekannt hat dein AVR 4 UART.
Es macht also wenig Sinn UART0 für dein GPS zu verwenden.

Übrigens:
Die Serielle ist kein Bus!

Die übliche Arduinos haben Angstwiderstände OnBoard, damit solche 
Kollisionen nicht zum rauchen führen.
Das ist wohl der Grund warum es am UNO (halbwegs) funktioniert.
Gast #5411374
Lesenswert?

Danke für eure Antworten.
Das heisst also ich müsste das über den 2. UART verbinden, also dann an 
den PIN RX1 statt RX0? Wie kann ich das im Programm festlegen?

Hier mal der Programmcode:
1
#include "NazaDecoderLib.h"
2
float Y_ist;
3
float X_ist; 
4
int sat;
5

6
void setup() {
7
  // put your setup code here, to run once:
8
Serial.begin(115200);
9
pinMode(24,OUTPUT);
10
}
11

12
void loop() {
13
  // put your main code here, to run repeatedly:
14

15
if(Serial.available())
16
  {
17
        uint8_t decodedMessage = NazaDecoder.decode(Serial.read());
18
    switch (decodedMessage)
19
    {   case NAZA_MESSAGE_GPS:
20
        //Serial.print("Lat: "); Serial.print(NazaDecoder.getLat(), 7);
21
        //Serial.print(", Lon: "); Serial.print(NazaDecoder.getLon(), 7);
22
        //Serial.print(", Sat: "); Serial.println(NazaDecoder.getNumSat());
23
        Y_ist = NazaDecoder.getLat();
24
        X_ist = NazaDecoder.getLon();
25
        sat = NazaDecoder.getNumSat();
26
        break;}
27
  }
28

29

30
if (X_ist = 0) {digitalWrite(24,LOW);}
31
else {digitalWrite(24,HIGH);}
32

33
}

eigentlich sollte es dann so sein, dass die GPS-Koordinaten in den 
beiden Variablen als Kommazahl gespeichert werden, zur überprüfung 
befindet sich eine LED am µC die Leuchtet sobald etwas empfangen wurde.
Gast #5411420
Lesenswert?

Achso dann nimmt man also einfach Serial1 anstatt Serial, also müsste 
das dann so aussehen oder?
1
#include "NazaDecoderLib.h"
2
float Y_ist;
3
float X_ist; 
4
int sat;
5

6
void setup() {
7
  // put your setup code here, to run once:
8
Serial.begin(115200);
9
Serial1.begin(115200);
10
pinMode(24,OUTPUT);
11
}
12

13
void loop() {
14
  // put your main code here, to run repeatedly:
15

16
if(Serial1.available())
17
  {
18
        uint8_t decodedMessage = NazaDecoder.decode(Serial1.read());
19
    switch (decodedMessage)
20
    {   case NAZA_MESSAGE_GPS:
21
        //Serial.print("Lat: "); Serial.print(NazaDecoder.getLat(), 7);
22
        //Serial.print(", Lon: "); Serial.print(NazaDecoder.getLon(), 7);
23
        //Serial.print(", Sat: "); Serial.println(NazaDecoder.getNumSat());
24
        Y_ist = NazaDecoder.getLat();
25
        X_ist = NazaDecoder.getLon();
26
        sat = NazaDecoder.getNumSat();
27
        break;}
28
  }
29

30

31
if (X_ist = 0) {digitalWrite(24,LOW);}
32
else {digitalWrite(24,HIGH);}
33

34
}


allerdings sind die Werte meiner drei Variablen immer noch null, obwohl 
das GPS Modul einwandfreien GPS Empfang hat. Was kann denn da noch das 
Problem sein? Das Beispielprogramm von der Library das mit dem Arduino 
Uno funktioniert sieht so aus:
1
#include "NazaDecoderLib.h"
2

3
void setup()
4
{
5
  Serial.begin(115200);
6
}
7

8
void loop()
9
{
10
  if(Serial.available())
11
  {
12
    uint8_t decodedMessage = NazaDecoder.decode(Serial.read());
13
    switch (decodedMessage)
14
    {   case NAZA_MESSAGE_GPS:
15
        Serial.print("Lat: "); Serial.print(NazaDecoder.getLat(), 7);
16
        Serial.print(", Lon: "); Serial.print(NazaDecoder.getLon(), 7);
17
        Serial.print(", Sat: "); Serial.println(NazaDecoder.getNumSat());
18
        break;}
19
  }
20
}

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