Hallo zusammen,
bisher habe ich einiges mit Arduino-Nanos realisiert; Als Text- und Statusausgabe häufig mit LC-Displays. - Wegen der 4 Hardware-UART-Schnittstellen und der größeren Anzahl von Ports möchte ich jetzt ein auf dem Nano laufendes Programm auf einen ATmega 2560 pro portieren.
Im ersten Step möchte ich von der UART RXD0 (Pin2 des 2560, 9600Baud, 8N1) lesen und die Daten auf dem LC-Display anzeigen. Im zweiten Step soll dann zusätzlich eine SIM800-Platine über eine weitere UART (z.B. RXD2 und TXD2) des ATmega 2560 kommunizieren.
Momentan will sich mir -trotz Hilfe "Config COMx" und etlichem Herumprobieren damit- aber nicht erschließen, warum ich beim 2560 schon die LCD-Ausgabe der RS232 / UART-Daten nicht hinbekomme; Schätze es liegt an der Konfiguration der UART-Schnittstelle
Im angehängten u. auf das Wesentliche minimierten Code unterscheiden sich nur die Zeilen 1-49 von denen für den Arduino Nano; Die sind ab Zeile 150 auskommentiert angehängt.
Hat jemand von euch hierzu einen Tipp für mich?
Alles anzeigen
bisher habe ich einiges mit Arduino-Nanos realisiert; Als Text- und Statusausgabe häufig mit LC-Displays. - Wegen der 4 Hardware-UART-Schnittstellen und der größeren Anzahl von Ports möchte ich jetzt ein auf dem Nano laufendes Programm auf einen ATmega 2560 pro portieren.
Im ersten Step möchte ich von der UART RXD0 (Pin2 des 2560, 9600Baud, 8N1) lesen und die Daten auf dem LC-Display anzeigen. Im zweiten Step soll dann zusätzlich eine SIM800-Platine über eine weitere UART (z.B. RXD2 und TXD2) des ATmega 2560 kommunizieren.
Momentan will sich mir -trotz Hilfe "Config COMx" und etlichem Herumprobieren damit- aber nicht erschließen, warum ich beim 2560 schon die LCD-Ausgabe der RS232 / UART-Daten nicht hinbekomme; Schätze es liegt an der Konfiguration der UART-Schnittstelle
Im angehängten u. auf das Wesentliche minimierten Code unterscheiden sich nur die Zeilen 1-49 von denen für den Arduino Nano; Die sind ab Zeile 150 auskommentiert angehängt.
Hat jemand von euch hierzu einen Tipp für mich?
BASCOM-Quellcode
- '###############################################################################
- ' Miniterminal-Ersatz für ATmega 2560pro
- '
- ' LC-Display:
- ' 1 - VSS(GND)
- ' 2 - VDD(+5V)
- ' 3 - Vo(0..5V) Kontrast
- ' 4 - RS D02 - PE4
- ' 5 - R/W - Auf GND legen!!!
- ' 6 - E D03 - PE5
- ' 7 - DB0 nc
- ' 8 - DB1 nc
- ' 9 - DB2 nc
- ' 10 - DB3 nc
- ' 11 - DB4 D10 - PB4
- ' 12 - DB5 D11 - PB5
- ' 13 - DB6 D12 - PB6
- ' 14 - DB7 D13 - PB7
- ' RX Haussystem = RXD0 (ATM2560 Pin2) via max232
- '###############################################################################
- 'Diese Anweisung setzt die Fusebits automatisch korrekt (https://www.mikrocontroller-elektronik.de/mini-controllerboard-mit-atmel-atmega2560-und-usb/)
- 'Syntax $PROG LB, FB , FBH , FBX
- $prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
- $regfile = "m2560def.dat" ' benutzter Mikrocontroller
- $framesize = 40 ' Frame
- $swstack = 40 ' SW Stack
- $hwstack = 64 ' Hardware Stack
- Config Serialin = Buffered , Size = 26 ' UART-Daten mit kleinem Puffer
- Enable Interrupts
- $crystal = 16000000 ' Quarz-Frequenz
- $baud = 9600 ' Baudrate (Übertragungsgeschwindigkeit)
- Baud = 9600
- '*** Ein/Ausgänge deklarieren **************************************************
- Config Porte.3 = Output ' interne Led
- Led Alias Porte.3
- '
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Porte.5 , Rs = Porte.4
- Config Lcd = 20 * 4
- Cls
- '*** Variablen definieren ******************************************************
- Dim Ctrl_modeflag As Byte
- Ctrl_modeflag = 0
- Dim Line_in_string As String * 25 ' Line_In_String-Zeile mit 25 Zeichen
- Dim Newchar_asc As Byte
- Dim Newchar_str As String * 1
- Dim Serial_in_counter As Byte
- Dim Spalte_lcd As Byte
- Dim Zeile_lcd As Byte
- '*** Hauptschleife *************************************************************
- Cls
- Cursor Off Noblink
- Upperline
- Lcd "Upperline"
- Lowerline
- Lcd " Lowerline"
- Thirdline
- Lcd " THIRDLINE"
- Fourthline
- Lcd " FOURTHLINE"
- Wait 1
- Cls
- Do
- ' Warten auf Zeichen von der UART (RX0)
- If Ischarwaiting() = 1 Then ' Auf Zeichen von Uart warten
- Newchar_str = Waitkey()
- Newchar_asc = Asc(newchar_str )
- '
- If Newchar_asc = 27 Then ' chr 27 als Zeilenstart erkennen
- Line_in_string = ""
- Line_to_store_flag = 1
- Serial_in_counter = 0 ' Zeichenzähler für die Zeile auf 0 setzen
- Else ' ElseIf Newchar_asc = 27 Then
- If Newchar_asc => 31 Then ' Steuerzeichen kleiner chr(32) ausblenden
- Incr Serial_in_counter ' Zeichenzähler +1
- Line_in_string = Line_in_string + Newchar_str ' Neues Zeichen an Line_In_String anhängen
- '
- If Serial_in_counter = 1 Then
- If Newchar_str = "[" Then ' Zeilennummer folgt
- Ctrl_modeflag = 1 ' Zeilennummer folgt
- End If ' EndIf Newchar_str = "["
- '
- If Newchar_str = "&" Then ' Displaysteuerung folgt
- Ctrl_modeflag = 2 ' Displaysteuerung folgt
- End If ' EndIf Newchar_str = "&"
- End If ' EndIf Serial_in_counter = 1
- '
- If Serial_in_counter = 2 Then
- If Newchar_str = ";" Then ' Spaltennummer folgt
- Ctrl_modeflag = 3 ' Spaltennummer folgt
- End If ' EndIf Newchar_str = "["
- '
- If Newchar_str = "&" Then ' Displaysteuerung folgt
- Ctrl_modeflag = 2 ' Displaysteuerung folgt
- End If ' EndIf Newchar_str = "&"
- '
- End If ' EndIf Serial_in_counter = 1
- Else ' ElseIf Newchar_asc => 31 Then
- If Ctrl_modeflag = 1 Then
- Zeile_lcd = 1 + Newchar_asc ' plus 1 wg. unterschiedlicher Zählweise B&E / Locate
- End If ' EndIf Ctrl_modeflag = 1
- If Ctrl_modeflag = 3 Then
- Spalte_lcd = 1 + Newchar_asc
- End If ' EndIf Ctrl_modeflag = 3
- Ctrl_modeflag = 0
- End If ' EndIf Newchar_asc => 31 Then
- End If ' EndIf NewChar_str = Chr(27) Then
- '
- If Serial_in_counter = 23 Then ' mehr als 24 Zeichen können's nicht sein
- If Instr(line_in_string , "[;H") > 0 Then
- Line_in_string = Right(line_in_string , 20) ' "[;H" vorne wegschneiden
- End If ' EndIf Instr(line_in_string , "[;H")
- '
- Locate Zeile_lcd , Spalte_lcd
- Lcd Line_in_string
- '
- End If ' EndIf Serial_in_counter = 24 Then
- '
- End If ' EndIf Ischarwaiting() = 1 Then
- Loop
- End
- '(
- '###############################################################################
- ' Miniterminal-Ersatz für Arduino-Nano kompatible Boards
- ' auf Basis https://bascomforum.de/index.php?thread/11-i2c-scanner/
- '
- '
- ' LCD an Port D: LCD PinOut: Pin14............Pin1
- ' Data: D4, D5, D6, D7, 1 - VSS(GND) 11 - DB4
- ' E : D3 2 - VDD(+5V) 12 - DB5
- ' RS: D2 3 - Vo(0..5V) 13 - DB6
- ' 4 - RS 14 - DB7
- ' 5 - R/W - Auf GND legen!!!
- ' 6 - E
- ' 7 - DB0 nc
- ' 8 - DB1 nc
- ' Piezo: D8 9 - DB2 nc
- ' 10- DB3 nc
- '###############################################################################
- $regfile = "m328pdef.dat" ' benutzter Mikrocontroller
- $framesize = 32 ' Frame
- $swstack = 32 ' SW Stack
- $hwstack = 64 ' Hardware Stack
- Config Serialin = Buffered , Size = 26 ' UART-Daten mit kleinem Puffer
- Enable Interrupts
- $crystal = 16000000 'Quarz-Frequenz
- $baud = 9600 'Baudrate (Übertragungsgeschwindigkeit)
- Baud = 9600
- '*** Ein/Ausgänge deklarieren **************************************************
- Config Portb.0 = Output ' Piezo-Buzzer
- Config Portb.5 = Output ' interne Led
- '
- Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
- Config Lcd = 20 * 4
- Cls
- '*** Variablen definieren ******************************************************
- ')