Bascom Atmega 2560 serielle GPS Daten über RXD0 (PE0) einlesen

JensE

Neues Mitglied
04. Jan. 2009
3
0
0
Sprachen
Hallo liebe AVR-Gemeinde,
ich beschäftige mich seit längerem mit AVR Contollern und auch mit Bascom. Serielle Verbindungen habe ich auch schon benutzt, aber nur beim Atmega32.
Gibt es beim Atmega 2560 da Besonderheiten? Ich bekomme jedenfalls nichts eingelesen.

Vielen Dank für Euere Bemühungen
 
Hallo Jens,

der ATmega2560 hat im Gegensatz zum ATmega32 zwei vier USART Module, eventuell verwendest du nicht das richtige Modul.

Ich tippe aber eher auf das Fusebit CKDIV8 bei dem ATmega2560 (bei Atmega32 nicht vorhanden), was du vielleicht nicht berücksichtigt hast. Das Fusebit ist von Werk aus programmiert und teilt noch einmal den Systemtakt durch 8. Wenn dies in deinem Sourcecode nicht berücksichtigt ist, stimmt natürlich die Baudrate nicht.

Ansonsten, stell doch einfach deinen Bascom Code in das Forum, vielleicht hat ja hierzu dann jemand noch Ideen :)

Dirk :ciao:
 
Ups, naja ... da kann er sich dann noch zwei weitere aussuchen ;)

Hallo Dirk,
der atmega 2560 war mal ein Arduino Mega 2560, den ich aber mit Bascom über ISP programmiere.
Ich habe mir die Fusebits angesehen. das CKDIV8 ist augeschaltet. Allerdings ist ein anderes Fusebit
eingeschaltet, es heißt "enable serial downloading". Kann das etwas damit zu tun haben?
Ich habe auch mal den relevanten Teil meines Quelltexte rausgesucht und hänge ihn mit dran.
Das ganze Programm wäre zu lang.

Code:
$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             ' 64
$swstack = 68                                               '44

$crystal = 16000000                                         'Quarz 16 Mhz


'Serieller Eingang für GPS
Config Serialin = Buffered , Size = 100
$baud = 4800


 'Interrupt configurieren
 Config Timer0 = Timer , Prescale = 256
 Config Timer1 = Timer , Prescale = 256
 Config Timer2 = Timer , Prescale = 256
 On Timer0 Multi1
 On Timer1 Sek
 On Timer2 Multi2
 Enable Timer0
 Enable Timer1
 Enable Timer2
 Enable Interrupts

Do

 Gelesen = Inkey()
 If Gelesen = 36 Then Input Gpsdaten Noecho                 '36 = $
 Header = Mid(gpsdaten , 1 , 5)
 If Header = "GPRMC" Then
   Anzahl = Split(gpsdaten , Teilstring(1) , ",")
   Gpsdaten = ""
   'Uhrzeit
   Tempstring = Left(teilstring(2) , 2)
   Stunde = Val(tempstring) + 1                             'UTC+1
   Stunde = Stunde + Sommerzeit                             '+sommerzeit
   If Stunde > 23 Then Stunde = Stunde - 24
   Zeit1 = Str(stunde) + ":" + Mid(teilstring(2) , 3 , 2) + ":" + Mid(teilstring(2) , 5 , 2)
  'Datum
   Datum1 = Left(teilstring(10) , 2) + "." + Mid(teilstring(10) , 3 , 2) + ".20" + Mid(teilstring(10) , 5 , 2)
   Wait 4
  'Breite
   North1 = Left(teilstring(4) , 2) + Chr(1) + Mid(teilstring(4) , 3 , 6)
  'Länge
   East1 = Left(teilstring(6) , 2) + Chr(1) + Mid(teilstring(6) , 3 , 6)
  'Wait 5
 End If

 Locate 1 , 1
 Lcd "Zeit: "
 Locate 1 , 8
 Lcd Zeit1
 Locate 1 , 16
 Lcd "     "
 Locate 1 , 21
 Lcd "Datum: "
 Locate 1 , 29
 Lcd Datum1
 Locate 2 , 1
 Lcd "North: "
 Locate 2 , 8
 Lcd North1
 Locate 2 , 21
 Lcd "East: "
 Locate 2 , 29
 Lcd East1
 

Loop
Jens
 
...Allerdings ist ein anderes Fusebit
eingeschaltet, es heißt "enable serial downloading"...

Hmm... meinst Du vielleicht SPIEN
Datenblatt S.337 schrieb:
Enable Serial Program and Data
Downloading
SPIEN=SPI prog. enabled, hat also was mit dem SPInterface zu tun (und nicht mit dem U(S)ART) - also: nein.
(Ohne diese Fuse kann der Controller nicht via SPI programmiert werden - sie kann via SPI gar nicht manipuliert werden)
 
Hallo JensE,
du hast in deinem großen Programm zu viele Möglichkeiten drin, warum der Empfang nicht funktioneren könnte.
Fehlersuche würde ich immer mit sehr abgespecktem Code machen.
Zum Beispiel so ein simples Programm:
Code:
$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             ' 64
$swstack = 68                                               '44
$crystal = 16000000                                         'Quarz 16 Mhz
$baud = 4800
Dim char as byte
'hier noch deine LCD config
Lcd "Start"
Do
   if ischarwaiting() then
      Char = Inkey()
      lcd Char
   end if
loop
end
Wenn dann nichts kommt, würde ich eine LED im Sekundentakt toggeln und messen, ob am Eingangspin überhaupt etwas ankommt.
 
Hallo Jens,

ich programmiere nicht in Bascom, kann dir also hier nicht besonders helfen, aber vielleicht hilft dir dies weiter:

http://avrhelp.mcselec.com/index.html?configcomx.htm

Dirk :ciao:


Code:
[COLOR=#000080][FONT=Courier New][B]$regfile[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][COLOR=#008080][FONT=Courier New]"m2560def.dat"[/FONT][/COLOR][COLOR=#008000][FONT=Courier New]' specify the used micro[/FONT][/COLOR]
 [COLOR=#000080][FONT=Courier New][B]$crystal[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 8000000                                          [/FONT][COLOR=#008000][FONT=Courier New]' used crystal frequency[/FONT][/COLOR]
 [COLOR=#000080][FONT=Courier New][B]$hwstack[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 40                                               [/FONT][COLOR=#008000][FONT=Courier New]' default use 32 for the hardware stack[/FONT][/COLOR]
 [COLOR=#000080][FONT=Courier New][B]$swstack[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 40                                               [/FONT][COLOR=#008000][FONT=Courier New]' default use 10 for the SW stack[/FONT][/COLOR]
 [COLOR=#000080][FONT=Courier New][B]$framesize[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 40                                             [/FONT][COLOR=#008000][FONT=Courier New]' default use 40 for the frame space[/FONT][/COLOR]
 
 [COLOR=#008000][FONT=Courier New]'The M128 has an extended UART.[/FONT][/COLOR]
 [COLOR=#008000][FONT=Courier New]'when CO'NFIG COMx is not used, the default N,8,1 will be used[/FONT][/COLOR]
 [COLOR=#000080][FONT=Courier New][B]Config[/B][/FONT][/COLOR][FONT=Courier New] Com1 [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 19200 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Synchrone [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Parity [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] None [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Stopbits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 1 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Databits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 8 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Clockpol [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0[/FONT]
 [COLOR=#000080][FONT=Courier New][B]Config[/B][/FONT][/COLOR][FONT=Courier New] Com2 [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 19200 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Synchrone [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Parity [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] None [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Stopbits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 1 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Databits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 8 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Clockpol [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0[/FONT]
 [COLOR=#000080][FONT=Courier New][B]Config[/B][/FONT][/COLOR][FONT=Courier New] Com3 [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 19200 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Synchrone [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Parity [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] None [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Stopbits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 1 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Databits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 8 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Clockpol [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0[/FONT]
 [COLOR=#000080][FONT=Courier New][B]Config[/B][/FONT][/COLOR][FONT=Courier New] Com4 [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 19200 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Synchrone [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Parity [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] None [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Stopbits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 1 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Databits [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 8 [/FONT][COLOR=#ff0000][FONT=Courier New],[/FONT][/COLOR][FONT=Courier New] Clockpol [/FONT][COLOR=#ff0000][FONT=Courier New]=[/FONT][/COLOR][FONT=Courier New] 0[/FONT]
 
 
 [COLOR=#008000][FONT=Courier New]'Open all UARTS[/FONT][/COLOR]
 [COLOR=#000080][FONT=Courier New][B]Open[/B][/FONT][/COLOR][COLOR=#008080][FONT=Courier New]"com2:"[/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]For[/B][/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]Binary[/B][/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]As[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]#[/FONT][/COLOR][FONT=Courier New]1[/FONT]
 [COLOR=#000080][FONT=Courier New][B]Open[/B][/FONT][/COLOR][COLOR=#008080][FONT=Courier New]"Com3:"[/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]For[/B][/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]Binary[/B][/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]As[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]#[/FONT][/COLOR][FONT=Courier New]2[/FONT]
 [COLOR=#000080][FONT=Courier New][B]Open[/B][/FONT][/COLOR][COLOR=#008080][FONT=Courier New]"Com4:"[/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]For[/B][/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]Binary[/B][/FONT][/COLOR][COLOR=#000080][FONT=Courier New][B]As[/B][/FONT][/COLOR][COLOR=#ff0000][FONT=Courier New]#[/FONT][/COLOR][FONT=Courier New]3[/FONT]
 
Hallo JensE,
du hast in deinem großen Programm zu viele Möglichkeiten drin, warum der Empfang nicht funktioneren könnte.
Fehlersuche würde ich immer mit sehr abgespecktem Code machen.
Zum Beispiel so ein simples Programm:
Code:
$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             ' 64
$swstack = 68                                               '44
$crystal = 16000000                                         'Quarz 16 Mhz
$baud = 4800
Dim char as byte
'hier noch deine LCD config
Lcd "Start"
Do
   if ischarwaiting() then
      Char = Inkey()
      lcd Char
   end if
loop
end
Wenn dann nichts kommt, würde ich eine LED im Sekundentakt toggeln und messen, ob am Eingangspin überhaupt etwas ankommt.

Hallo Rolf,
ist diese Zeile nicht notwendig?

Config Serialin = Buffered , Size = 100

Viele Grüße Jens
 
Hallo Jens,
die Zeile ist in enem Minimalprogramm nicht nötig.
Sie sorgt dafür, dass der Empfang gepuffert wird. Das ist interessant, wenn du nicht immer schnell genug reagieren kannst, wenn Daten über sie Serielle eintreffen und dann Zeichen verlorengehen könnten.
Es ist hauptsächlich eine Komfortfrage, ob man das selber programmiert oder auf die Bascom Routine zurückgreift.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)