Bascom BASCOM ; Erste Schritte zum Ausprobieren

Nicht immer, nur zum Senden des Befehls. Und natürlich zum empfangen, wenn du willst.
Aber wenn nichts angeschlossen ist stört das ja nicht.
RS232 ist keine wirkliche Verbindung. Keine Seite weiß ob überhaupt was am anderen Ende angeschlossen ist (außer man nutzt die Statusleitungen, machen wir aber nicht). Es wird einfach nur abgehört und auf etwas interpretierbares gewartet, bzw. etwas in einem bestimmten Format und Baudrate gesendet.
 
Wie kann ich dann z.B. meine Rote LED im erten Teilprogramm steuern, wenn mein Versuchsaufbau nicht mit dem PC verbunden ist?
Ebenso im ersten Teilprogramm die "Pwm1b=Zeichen", die ja über UART Veränderbar ist.
Ich habe zwar viel gelernt, aber jezt steh ich wieder da, wie am Anfang.
 
Ja ne, das ist klar, ich dachte jetzt wegen den z.B. 8 Stunden. Da musst du ja nur den Startbefehl senden, dann läuft es ja selbstständig ab.
 
Ja, aber wie setzte ich die ganze Sache nun um?
Das eine wäre das mit den (8) Stunden.
 
War ja nur ein Beispiel was Du machen KANNST, und was mit den bisherigen (und der nächsten) Übungen umgesetzt werden kann.
Die nächste Aufgabe wäre, die extremsten Werte (0 und 255) zu verwenden, um die PWM-Ausgabe komplett ab-/anzuschalten.
Meinetwegen kannst Du auch 'n Taster an einen Pin hängen. Empfehlenswert wäre einer der INT-Pins, da man den Controller dann bei Inaktivität schlafen schicken könnte - der Int-Pin kann den Controller dann wecken.
(alternativ kann man natürlich auch den Reset-Pin verwenden: nach einem Reset 8h Kerzenflackern, danach schaltet der Controller ab und in den Sleep...
dafür brauchst Du aber keinen Mega8 - da würde auch ein Tiny4/5/9/10 reichen)

Also: Taster an eine geeigneten Pin soll jetzt erstmal die UART-LED toggeln.
Die Entprellung des Tasters sollte nicht mit wait geschehen - aber wir haben ja beim Blinken 'ne halbe-Sekunde-Quelle...

Wie gesagt, wenig Zeit... bei Problemen hilft Dir vielleicht Thomas weiter.

Wenn das steht, im nächsten Schritt mit dem Taster die PWM-LEDs an-/abschalten, aber nicht durch stoppen des Timers oder PWM1A/B auf Extremwerte setzen, sondern über den Compare Output Mode. (entweder direkt über das Register, oder mit Bascom Mitteln ("Config Timer1 blablub … Compare A Pwm = Disconnect …"))
 
Mit Bascom hatte ich allerdings bei den Tinys negative Erfahrungen gesammelt (Programmspeicher zu schnell voll).
Gut möglich dass sich das im Laufe der Jahre geändert hat.
Bleib lieber erst mal beim Mega, auch wenn der überdimensioniert ist. Grade beim herum experimentieren ist etwas Luft nach Oben immer besser.
 
Für meine kleinen Anwendungen reicht der kleine Tiny13 erstmal. Mit dem habe ich angefangen. Mein Problem ist jetzt, dass mein USBasp Programmierer, gestern plötzlich nicht mehr erkannt wird. Habe mir heute einen neuen bestellt. Zur Not habe ich ja noch mein LPT Eigenbau Programmer.
 
Hehe, so geht's auch, habe ich selber auch mal gebaut, sowohl per LPT alsauch COM. Wobei bei letzterem die Reset Leitung von Hand bedient werden musste, mangels Kontrollleitungen. Sonderlich fix waren die zwar nicht unterwegs, aber naja, es hat gereicht.
Ich selbst nutze den AVR Dragon und bin damit zufrieden, nur werden scheinbar neuere Chips nicht mehr eingepflegt. Schade eigentlich, weil der konnte ISP und Hardware Programmierung.
 
mangels Kontrollleitungen
Warum werden da nicht einfach die Hardware-Handshakes verwendet?
Habe mir heute einen neuen bestellt
Meine Empfehlung wäre früher ein richtiger AVRisp mkII gewesen. Der ist inzwischen obsolet, und unterstütz neuere Programmierschnittstellen auch nicht mehr - derzeitige Empfehlung wäre also der ATMEL ICE... aber egal...
Mit Bascom […] bei den Tinys[…] Programmspeicher zu schnell voll).
Naja... erstens kann man ja da wenn nötig optimieren (Bascom löscht beim Start erstmal den gesamten SRAM, dagegen gibt's aber die noramclear-Direktive. Sparen läßt sich u.U. außerdem beim Register-Sichern bei Interrupts. Interessant klingt auch die reduceivr-Direktive, insbesondere, wenn gar keine Interrupts verwendet werden...

Das größte Sparpotential liegt natürlich in der Vermeidung von "unnötiger Programmierung" (Fließkommazahlen wo ganze Zahlen reichen, schieben statt teilen/multiplizieren usw)

Zweitens ist der Speicher bei moderneren Zwergen auch nicht mehr zwingend Tiny... inzwischen gibt's bei vielen Serien auch 8kB-Flash (wie war das? Bascom ist in der Free-Version auf 4k beschränkt??)

(Ich kann ja mal den Flacker-Code unverändert mit meinem Tiny10 probieren...)
 
Warum werden da nicht einfach die Hardware-Handshakes verwendet?
Hab ich ja. Hast aber nur 2 Ausgänge. Macht MOSI und Clock. Eingänge wären 3 (4 wenn man RingIndicator mit zählt, der hilft hier aber nicht). Für Reset muss n Jumper her halten.
 
Achso.. Ich hatte jetzt an irgendnen UART-SPI-IC dazwischen gedacht (und wenns ein Tiny ist)
 
Ne, bei mir war wie beim LPT auch direkt verdrahtet (abgesehen vom nötigen Pegelwandler).
 
Die nächste Aufgabe wäre, die extremsten Werte (0 und 255) zu verwenden, um die PWM-Ausgabe komplett ab-/anzuschalten.
Ich habe nun meinen ersten Gedanken durchzusetzen versucht, doch irgendwie komme ich nicht ans Ziel. So sieht mein drittes Teilprogramm aus. Nur, wenn ich an den Taster näher komme, fängt die Pwm1a-Led an schnell zu blinken.

CodeBox BascomAVR
$regfile = "m8def.dat"                  'Controllerdefinitionsdatei einbinden
$crystal = 8000000                      'Systemtakt angeben (Baudrate)
$hwstack = 40                           'Stacks
$swstack = 16
$framesize = 32
$baud = 19200                           'Baudrate UART

Dim Zeichen As Byte                     'UART-Empfang
Dim Z As Byte                           'Timerüberlaufzähler
Dim Flag As Bit
Dim X As Long

Rot Alias Portd.7                       'Namen für LED-Beine
Gruen Alias Portc.3
Taster Alias Pinc.0
Config Rot = Output                     'Aus- und Eingänge
Config Gruen = Output
Config Taster = Input
Taster = 1

Rot = 1                                 'LEDs erstmal an
Gruen = 1

Flag = 0
X = 0

'Phasenkorrekter 8-Bit-PWM, PWM-Frequenz=245Hz
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 250
Pwm1b = 50

Do                                      'Hauptschleife Begin
'erstes Teilprogramm - UART Empfang und auswerten
   If Ischarwaiting() = 1 Then          'Wenn Zeichen Empfangen
      Zeichen = Inkey()                 'dann Zeichen aus Puffer lesen
      If Zeichen = "1" Then             'Wenn Zeichen = "1"
         Rot = 1                        '...
         Print "Led An"
      Elseif Zeichen = "0" Then         'Wenn Zeichen = "0"
         Rot = 0                        '...
         Print "Led Aus"
      Elseif Zeichen = "t" Then         'Wenn Zeichen = "t"
         Toggle Rot                     '...
         Print "Toggle Led"
      Elseif Zeichen = "?" Then         'Wenn Zeichen = "?"
         If Rot = 0 Then                'sonst wenn Led aus ist...
            Print "Led ist aus"
         Elseif Rot = 1 Then            'Dann wenn Led an ist...
            Print "Led ist an"
         Elseif Zeichen = "b" Then
            Pwm1b = 250
         End If
      End If
   End If

'zweites Teilprogramm - LED durch timer blinken lassen
   If Tifr.tov1 = 1 Then                'wenn Timer übergelaufen ist
      Tifr.tov1 = 1                     'Überlaufflag zurücksetzen
      Incr Z
      If Z = 245 Then                   'Überläufe zählen (245)
         Z = 0                          'Zähler zurücksetzen
         Toggle Gruen                   'LED toggeln
      End If
   End If

'drittes Teilprogramm - Pwm1a Ausgabe komplett ab-/anzuschalten
   If Taster = 0 Then Flag = 1
   If Flag = 1 Then Incr X
   If X > 5000 Then
      Pwm1a = 1
      Exit Do
   End If

Loop                                    'Hauptschleife Ende
 
Ich verstehe deinen Gedankengang grade nicht so.

Bei extremen Werten komplett an/abschalten würde ich eher so machen (Pseudocode):
Code:
Wenn NeuerWert = 0 Dann
   PWM aus
   LED an
Sonst Wenn NeuerWert = 255 Dann
   PWM aus
   LED aus
Sonst
   PWM an
---
 
Zeichen (zumindest vorerst)
50 und 51, wozu ist das da? Ausgeführt wird es nie.
 
50 und 51, wozu ist das da? Ausgeführt wird es nie.
Das ist schon eine ganze Weile im Code enthalten. Hatte ich mal irgend etwas getestet und nicht weiter beachtet, weil es auch nicht gestört hatte. werde es halt wieder rausnehmen.
Zeichen (zumindest vorerst)
Also müsste zur Aufgabenlösung der Abschnitt
'drittes Teilprogramm - Pwm1a Ausgabe komplett ab-/anzuschalten
weggelassen werden und mit "Zeichen" im ersten Teilprogramm weitergeführt werden.
Wäre das richtig?
 
Genau.
Wenn Zeichen kein Befehl ist den du kennst und abarbeitest (0, 1, ?, ...) dann Zeichen als neuen Wert nutzen.
So wirklich schön ist das ganze jetzt zwar nicht, aber zum testen und lernen reicht es erst mal aus.

Schöner wäre es (für später mal):
Beispielsweise ein Befehl A einzubauen. Wurde der empfangen wird das nächste Byte als neuer Wert interpretiert. Das Selbe für B.
Davor würde ich aber vielleicht mal Unterprogramme (Sub) angehen, dann wird der Rattenschwanz (irgendwann wird es einer) etwas übersichtlicher.
 
die nächste Aufgabe zielte auf das aus- und anschalten der beiden PWM ab (mittels Compare Output Mode bzw Config Timer ... Disconnect). Ursprünglich über weitere UART-Kommando-Werte gesteuert - aber da Heini irgendwann gegen den UART war, jetzt stattdessen über einen Taster. Wenn möglich gleich an einem externen Interrupt-Pin (wegen Sleep).

Natürlich müßte der Code aufgeräumt werden, aber am Ende fliegt eh das meiste raus. Es geht hier darum zu zeigen, wie man viele unterschiedliche Funktionen störfrei quasi-gleichzeitig laufen lassen kann.
 

Ü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)