Erstes BASCOM-Programm auf Arduino

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • Erstes BASCOM-Programm auf Arduino

    Hallo Profi Programmierer,

    ich habe heute mich gewagt meine Arduino uno mit Bascom zu programmiere dann habe mir gedacht etwas weiter zu gehen, geht aber nicht bitte um Korrektur und Erklärung. Danke sehr in voraus
    Gruß Antonio.

    BASCOM-Quellcode

    1. $regfile = "m328pdef.dat"
    2. $crystal = 16000000
    3. $hwstack = 40
    4. $swstack = 16
    5. $framesize = 32
    6. baud = 4800
    7. Config Portb.5 = output 'Konfigurieren des Ausgangs der Onboard LED
    8. Config Portb.4 = Output
    9. Config Portb.3 = Output
    10. Config Portb.2 = Output
    11. Config Portb.1 = Output
    12. Config Portb.0 = Output
    13. dim Durchlauf as Byte 'Variable fuer Durchlaufe setzen
    14. Durchlauf = 0 'Durchläufe auf null setzen, default ist 255
    15. Print "Bascom Test auf Arduino UNO R3"
    16. Wait 1
    17. DO 'start der schleife
    18. Print "durchlauf Nr "; durchlauf
    19. print "LED an"
    20. portb.5 = 1 'LED einschalten
    21. print "Warten 1 sekunde"
    22. Waitms 100
    23. print "LED an"
    24. Portb.5 = 0 'LED einschalten
    25. print "Warten 1 sekunde"
    26. Waitms 100
    27. print "LED aus"
    28. Portb.4 = 1 'LED ausschalten
    29. Waitms 90
    30. Print "Warten 2 sekunden"
    31. Print "LED aus"
    32. Portb.4 = 0 'LED ausschalten
    33. Waitms 90
    34. print "LED an"
    35. Portb.3 = 1 'LED einschalten
    36. print "Warten 1 sekunde"
    37. Waitms 80
    38. print "LED an"
    39. Portb.3 = 0 'LED einschalten
    40. print "Warten 1 sekunde"
    41. Waitms 80
    42. print "LED aus"
    43. Portb.2 = 1 'LED ausschalten
    44. Waitms 70
    45. Print "Warten 2 sekunden"
    46. Print "LED aus"
    47. Portb.2 = 0 'LED ausschalten
    48. Waitms 70
    49. print "LED an"
    50. Portb.1 = 1 'LED einschalten
    51. print "Warten 1 sekunde"
    52. Waitms 60
    53. print "LED an"
    54. Portb.1 = 0 'LED einschalten
    55. print "Warten 1 sekunde"
    56. Waitms 60
    57. print "LED aus"
    58. Portb.0 = 1 'LED ausschalten
    59. Waitms 50
    60. Print "Warten 2 sekunden"
    61. Print "LED aus"
    62. Portb.0 = 0 'LED ausschalten
    63. Waitms 50
    64. Incr Durchlauf
    65. Loop
    Alles anzeigen
    Edit von stefanhamburg: Ich habe den Code jetzt in ein Code-Fenster gesetzt. Bitte denkt wegen der Lesbarkeit beim Posten von Programmcode daran, das zu tun. Danke

    Danke dir Stefan muss noch viel lernen, ich weis nicht wie es geht aber ich bemühe mich. Antonio
    Teilen dein Wissen, so erlagst du zu Unsterblichkeit

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ledblu ()

  • Hast du an deinen Ausgängen auch Leds dran, die du ein/ausschaltest?
    Du bist auch mit deinem Text bei der Printausgabe ein bisschen durcheinander gekommen. Und deine Wartezeiten passen mit deinem Text nicht zusammen. Für 'Warten 1 Sekunde' brauchst du auch ein wait 1, oder waitms 1000.
    Einen code kannst du durch anklicken von </> in der oberen Zeile vom Eingabefenster eingeben.
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Als Ergänzung am Rande: Es gibt $baud und es gibt auch baud

    "$BAUD overrides the compiler setting for the baud rate and BAUD will change the current baud rate.
    So $BAUD is a global project setting in your source code while BAUD will change the baud rate during run time.
    You could use BAUD to change the baud rate during run time after the user changes a setting."
    Siehe BASCOM-Hilfe

    Frage an Antonio: Wurde überhaupt fehlerfrei kompiliert? Wurde fehlerfrei das Programm zum Arduino übertragen?
    Also: Funktioniert überhaupt schon etwas auf dem Arduino und geht es Dir jetzt um Details?
  • Hallo tschoeatsch ,

    ja die led sind angeschlossen von PB5 bis PB0 mit vor widerstand eine geht Zwei geht auch aber wenn ich alle 6 laufen lassen will so wie ich in Prg. geschrieben habe
    geht nicht, ich bin 4 Std. dabei ich weis nicht weiter Könntest du tschoeatsch ein bissen korrigieren die sollen wie ein lauflicht oder wie eine internierender ein und
    aus gehen, damit ich weiterkommen.
    danke in voraus.
    Gruß Antonio
    Teilen dein Wissen, so erlagst du zu Unsterblichkeit
  • Hallo Stefan,

    ja das ist das tolle ich habe heute in forum unter Bascom, ich weis nicht wer das geschrieben hat und habe sofort los gelegt
    es hat alles funktioniert, das war eine kleine test Prg. damit Arduino die Led 13 Ein eine Sekunde aus 2 Sekunden hat schön
    geblinkt und dann habe noch eine und hat auch funktioniert und noch eine auch funktioniert der Compiler sagt no Error und
    mit f4 hat alles geklappt.

    Gruß Antonio

    Hallo an alle danke für eure Hilfe es läuft alles wunder bar nur mit der Zeit muss was korrigiere an sonst ist eine wunder bares Gefühl
    mit Bascom zu schreiben und in Arduino zu Speicher danke.


    Gruß Antonio
    Teilen dein Wissen, so erlagst du zu Unsterblichkeit

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ledblu ()

  • BASCOM-Quellcode

    1. $regfile = "m328pdef.dat"
    2. $crystal = 16000000
    3. $hwstack = 40
    4. $swstack = 16
    5. $framesize = 32
    6. 'baud = 4800
    7. Config Portb.5 = output 'Konfigurieren des Ausgangs der Onboard LED
    8. Config Portb.4 = Output
    9. Config Portb.3 = Output
    10. Config Portb.2 = Output
    11. Config Portb.1 = Output
    12. Config Portb.0 = Output
    13. dim Durchlauf as Byte 'Variable fuer Durchlaufe setzen
    14. Durchlauf = 0 'Durchläufe auf null setzen, default ist 255
    15. Print "Bascom Test auf Arduino UNO R3"
    16. Wait 1
    17. DO 'start der schleife
    18. Print "durchlauf Nr "; durchlauf
    19. Waitms 1000
    20. Print "LED an"
    21. Portb.5 = 1 'LED einschalten
    22. Print "Warten 1 sekunde"
    23. Waitms 1000
    24. Print "LED aus"
    25. Portb.5 = 0 'LED ausschalten
    26. Print "Warten 1 sekunde"
    27. Waitms 1000
    28. Print "LED an"
    29. Portb.4 = 1 'LED anschalten
    30. Print "Warten 2 sekunden"
    31. Waitms 2000
    32. Print "LED aus"
    33. Portb.4 = 0 'LED ausschalten
    34. Print "Warten 1 sekunde"
    35. Waitms 1000
    36. Print "LED an"
    37. Portb.3 = 1 'LED einschalten
    38. Print "Warten 1 sekunde"
    39. Waitms 1000
    40. Print "LED aus"
    41. Portb.3 = 0 'LED ausschalten
    42. Print "Warten 1 sekunde"
    43. Waitms 1000
    44. Print "LED an"
    45. Portb.2 = 1 'LED anschalten
    46. Print "Warten 2 sekunden"
    47. Waitms 2000
    48. Print "LED aus"
    49. Portb.2 = 0 'LED ausschalten
    50. Print "Warten 1 sekunde"
    51. Waitms 1000
    52. Print "LED an"
    53. Portb.1 = 1 'LED einschalten
    54. Print "Warten 1 sekunde"
    55. Waitms 1000
    56. Print "LED aus"
    57. Portb.1 = 0 'LED ausschalten
    58. Print "Warten 0,5 sekunden"
    59. Waitms 500
    60. Print "LED an"
    61. Portb.0 = 1 'LED anschalten
    62. Print "Warten 2,5 sekunden"
    63. Waitms 2500
    64. Print "LED aus"
    65. Portb.0 = 0 'LED ausschalten
    66. Print "Warten 1 sekunde"
    67. Waitms 1000
    68. Incr Durchlauf
    69. Loop
    Alles anzeigen
    Ich hab' mal das 'baud' auskommentiert, eigentlich müsste man doch nix verstellen, wenn das Programmieren über USB geht, dann sollte das print mit der gleichen Einstellung auch gehen (glaube ich).
    Der Hauptfehler waren die kurzen Wartezeiten, die waren durchwegs zu kurz, sodass die Leds nur kurz aufgeblitzt haben. Probier jetzt mal die korrigierte Version. Ob die fehlerfrei ist, kann ich nicht sagen, weil nicht probiert.
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Das mit den Baud hab ich wohl in meinem Muster vergessen. Egal, läuft ja ersteinmal und der erste hatte seinen Spass.
    Hab mal aufgerüstet mit nem DFrobot Keypad und LCD shield das der Postbote heute gebracht hat:
    Image2017_060117_191957_00000.pngImage2017_060117_191957_00002.png

    Quellcode

    1. $regfile = "m328pdef.dat"
    2. $crystal = 16000000
    3. $hwstack = 40
    4. $swstack = 16
    5. $framesize = 32
    6. $baud = 4800
    7. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , Rs = PortB.0
    8. Config Lcd = 16 * 2
    9. 'Verwendet wird ein 16x2 Display im Pin mode
    10. Cursor Off Noblink 'Cursor abschalten
    11. cls 'LCD inhalt löschen und auf Home Position zurücksetzen
    12. dim Durchlauf as Byte 'Variable fuer Durchlaufe setzen
    13. Durchlauf = 0 'Durchläufe auf null setzen, default ist 255
    14. Deflcdchar 1 , 28 , 16 , 28 , 32 , 32 , 32 , 32 , 32 ' CHR(1) als copyright symbol festlegen
    15. Deflcdchar 2 , 1 , 32 , 4 , 14 , 21 , 4 , 2 , 1 ' rpm links
    16. Deflcdchar 3 , 28 , 2 , 1 , 1 , 1 , 1 , 2 , 28 ' rpm rechts
    17. cls 'nach der definition der Eigenen character muss ein CLS durchgeführt werden, Deflcdchar 0 wird nicht definiert da es nicht mit einer Variable benutzt werden kann
    18. do
    19. cls
    20. locate 1,1
    21. LCD CHR(1);"Bascomforum.de"
    22. Locate 2,1
    23. LCD "LCD Test " ;CHR(2);CHR(3)
    24. Wait 2
    25. cls
    26. upperline
    27. LCD "Durchlauf"
    28. lowerline
    29. LCD "Nummer "; durchlauf
    30. incr durchlauf
    31. wait 2
    32. Loop
    Alles anzeigen

    Auch andere dürfen was machen. Wer schreibt den teil zum ADC Auslesen der Tasten? Teste das gern auf der HW aus.

    Tobias

    p.s. Backlight vom LCD lässt sich über B.2 schalten:
    o= aus
    1= an

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Schraubbaer ()

  • Hallo tschoeatsch ,

    auch deine Korrektur läuft klasse ich verstehe nicht was bedeutet baud' ( aus kommentiert ) hat vielleicht mit AVR Option da gehe ich hinein und stelle
    der Programmer Arduino und dann BAUD 115200 so ist die Einstellung und der Port 8 müssen übereinstimmen oder sind 2 verschiedene Sache.

    danke für die Korrektur tschoeatsch ( melde dich ciao )

    Gruß Antonio
    Teilen dein Wissen, so erlagst du zu Unsterblichkeit
  • Hallo Tobias,

    ganz große klasse ich habe 3 stück davon morgen möchte gern probieren ob mir es geling.

    Tobias hast du besondere Einstellungen an die Display? brücken oder sonst was oder direkt auf Arduino und gut
    das würde mich interessieren also danke noch mal werde dich auf laufen halten Ciao.

    Gruß Antonio
    Teilen dein Wissen, so erlagst du zu Unsterblichkeit
  • Du musst das Borad nur auf den Uno aufstecken. Sonst nichts. Dabei an den Rechten Steckverbindern auf uno und aufsatz orientieren, Die müssen gleich aufeinander/übereinander stecken. Die linken sind etwas zu kurz. Und aufpassen das du an der USB buchse keinen kurzschluss machst wenn du von Oben die Platine steckst.
    Image2017_060117_191957_00003.bmp
    Tobias

    Die tasten sind so an C.0 angeschlossen, um ports zu sparen wurde das an einen ADC gehangen.
    Unbenannt.png
  • Schraubbaer schrieb:

    Wer schreibt den teil zum ADC Auslesen der Tasten?
    Da könnte ich ausnahmsweise etwas beisteuern (wenn ich nicht wüsste, dass Du das kannst)
    Link zum Modellbauthread
    - erst ADC-Wert der Taster bestimmen
    - ADC-Wert auslesen und in einer select-case Struktur auswerten

    Viele Grüße
    Mathias
    Heisenberg bei einer Radarkontrolle:
    Polizist: "Wissen Sie, wie schnell Sie waren?"
    Heisenberg: "Nein. Aber ich weiß genau, wo ich jetzt bin!"

  • Ist ja witzig.

    Schaut mal, an was ich gerade arbeite :D
    Ich brauchte nämlich was um eine 4x4 Matrix an einen ADC anzuschalten und wollte in de Folge dann die Werte nicht auch noch zu Fuß ermitteln.
    Ist aber noch nicht fertig.
    Wenn's ferig ist, sollte zumindest BasCom-Datazeilen generiert werden können, im Idealfall sogar auch fertiger Code.

    KeyMatrixCalc.png
  • Zitronenfalter schrieb:

    Wenn's ferig ist, sollte zumindest BasCom-Datazeilen generiert werden können, im Idealfall sogar auch fertiger Code.
    Super, ich hab mir dafür sonst immer ein Hilfsprogramm geschrieben. Hab auf den Platinen ja immer ein LCD mit drauf. Die ADC- Methode funktioniert prima, hab auf der einen Platine 64 Taster über ADC- Auswertung und das alles an (ja nur) einem Pin.

    Gruß Christian
    Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
  • mac5150 schrieb:

    Da könnte ich ausnahmsweise etwas beisteuern (wenn ich nicht wüsste, dass Du das kannst)
    Link zum Modellbauthread
    - erst ADC-Wert der Taster bestimmen
    - ADC-Wert auslesen und in einer select-case Struktur auswerten

    Viele Grüße
    Mathias
    Zu den Bildern im Modellbauforum hab ich dann aber auch noch meine Anmerkung. Es ist besser 1% Metallfilmwiderstände für die Tastatur zu verwenden, dann passen die ADC- Werte besser.

    Gruß Christian
    Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
  • Sehr gut, Zitronenfalter.
    Bitte fange dafür einen neuen Thread an, damit das nicht in Antonios Thread untergeht. Das wäre doch schade bei so einem schönen Tool. Das verdient einen eigenen Thread mit eigenem Titel, damit es gut gefunden wird.

    @Antonio: Läuft dieses Programm jetzt wie gewünscht? Dann würde ich diesen Thread schließen und Du machst bei einer nächsten Frage einen neuen Thread auf. o.k.?