PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BASCOM Projekt_Unterstützung



Feuerring
05.07.2016, 13:56
Hallo zusammen,

um mal wieder mit uC was zu machen habe ich ein Projekt gestartet ... Projekt Mähroboter (https://www.roboternetz.de/community/threads/69425-Projekt-M%C3%A4hroboter?p=628924&viewfull=1#post628924).
vor ca 30 Jahren habe ich mit einem Z80 meine Erfahrungen gesammelt und den NDR-Klein-Computer auf ECB mit selbst entwickelten Einsteck-Karten ausgebaut.
Hat damals viel Spaß gemacht, doch dann kam die Zeit wo PCs zu erschwinglichen Preisen zu bekommen war.
In der Zwischenzeit habe ich viel mit IOWorrias gemacht und auch dafür den IOW-Socket-Server und das Test-Programm ALL-In-ONne dafür entwickelt, einige werden mich dadurch vielleicht kennen.

Nun möchte ich aber mal wieder was mit uC machen und dafür braucht man ein Sinnvolles Projekt, z.B. ein Mähroboter.

Bei der Umsetzung habe ich mich für ATMega und Bascom entschieden.

Da ich mich für ein PC-Gestütztes System entschieden habe, benötigt man eine FUNK-COM Anbindung ...

Um langsam in die Materie einzusteigen, habe ich das mal versucht als erstes zu realisieren.
Aufbau: Arduino(Nano 328p) und ein Terminal-Adapter


$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 9600


Config Serialin = Buffered , Size = 40
Dim Na As String * 30
Dim Si As Byte


Enable Interrupts


Print "Start_Main"


Do
If Ischarwaiting() <> 0 Then
Si = Inkey()
If Si <> 13 And Si <> 10 And Len(na) < 30 Then
Na = Na + Chr(si)
Else
If Ucase(na) = "STATUS" Then
Print "ACK;STATUS"
Waitms 500
Print "Status;V1=12;V2=13;S4=2000" ' Beispiel einer Rückantwort
Elseif Ucase(na) = "STOP" Then
Print "ACK;STOP"
Waitms 500
Print "STOP" ' Beispiel einer Rückantwort
Elseif Ucase(na) = "START" Then
Print "ACK;START"
Waitms 500
Print "START" ' Beispiel einer Rückantwort
Else
Print "NAK;" ; Na
End If
Na = ""
End If
End If
Loop


Möchte die Verschiedenen Bereicht ( Antrieb / Sensoren / Orientierung ) durch eigene Module(uC) aufbauen und diese mit I2C vom Main-Controller steuern.

Bei dem Projekt geht es nicht darum das mit so wenig Ressourcen wie möglich zu gestalten, sondern eher um ein Projekt ( Spaß an der Umsetzung )

Werde bestimmt öfter vor Problemen stehen, wo ich nicht weiter komme, in der Hoffnung die dann durch eure Hilfe bewerkstelligen kann.

Die ATMega -Serie hat ja uC mit verschiedener Ausstattungen, wie kann ich mit BASCOM aus die Hardware Unterstützung zurückgreifen ohne das Bascom versucht das Software mäßig zu realisieren.
Mir ist noch nicht ganz klar wie z.B. I2C Befehle nicht Softwaremäßig sondern Hardwaremäßig in BASCOM umgesetzt werden ... wird das über $regfile = "m328pdef.dat" gesteuert ...

Unregistriert
05.07.2016, 19:02
Die ATMega -Serie hat ja uC mit verschiedener Ausstattungen, wie kann ich mit BASCOM aus die Hardware Unterstützung zurückgreifen ohne das Bascom versucht das Software mäßig zu realisieren.
Mir ist noch nicht ganz klar wie z.B. I2C Befehle nicht Softwaremäßig sondern Hardwaremäßig in BASCOM umgesetzt werden ... wird das über $regfile = "m328pdef.dat" gesteuert ...

$LIB "I2C_TWI.LBX"

Wird in der BASCOM-Hilfe an verschiedenen Stellen erläutert. Läßt sich mit der Suchfunktion und dem Library-Namen oder auch unter I2C finden.

Feuerring
06.07.2016, 01:00
Best Dank "Gast" für die Info ...



' ------------ Bascom - Parameter ------------------------$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 9600


Print "Start_Main"


' ------------ I2C - Master ------------------------
$lib "i2c_twi.lbx"
Config Scl = Portc.5
Config Sda = Portc.4
I2cinit
Config Twi = 100000


' ------------ RS232 - Input ------------------------
Config Serialin = Buffered , Size = 40
Enable Interrupts


' ------------ DIM ------------------------
Dim Na As String * 30 'RS232-Input-String
Dim Si As Byte 'RS232 Input
Dim X As Byte 'Temp-Data






Do


If Ischarwaiting() <> 0 Then
Si = Inkey()
If Si <> 13 And Si <> 10 And Len(na) < 30 Then
Na = Na + Chr(si)
Else
If Ucase(na) = "STATUS" Then
Print "ACK;STATUS"
Waitms 500
Print "Status;xxxx"
Elseif Ucase(na) = "ON" Then
Print "ACK;ON"
I2csend &H40 , &HFF 'PCF8574 Write
I2creceive &H40 , X 'PCF8574 Read
Print "ON;" ; X
Elseif Ucase(na) = "OFF" Then
Print "ACK;OFF"
I2csend &H40 , &H00 'PCF8574 Write
I2creceive &H40 , X 'PCF8574 Write
Print "OFF;" ; X
Else
Print "NAK;" ; Na
End If
Na = ""
End If
End If




Loop

habe die LIB "i2c_twi.lbx" in meinem einfachem Test-Programm eingebunden und es hat auf Anhieb geklappt ...
In ein paar Tagen bekomme ich 5 weitere Arduion_Nano, dann werde ich auch mal die kostenpflichtige "I2CSLAVE Library" ausprobieren ...
da der ATMega328P wohl eine Weiterentwicklung des M128 mit TWI-Hardware (TWI-I2C) ist, sollte auch die Hardware-Unterstützung damit klappen ...