Bascom BASCOM ; Erste Schritte zum Ausprobieren

Naja, Taster entprellen ist ansich wichtig, ja, aber nicht hier. Wir fragen den (aus Sicht des Controllers) nur alle Jubeljahre ab, dass da ein Prellen nicht auffällt.

Und Bitwait kenne ich jetzt nicht. Aber wenn du das nur beim Loslassen zuweisen willst, ist ja kein Problem, dann weis den Ausgang halt nicht da zu wo der Taster noch gedrückt ist, sondern da wo er es nicht mehr ist. Also den Select Case Block verschieben, das wars.
Zumindest fast. Was hier zum Problem werden könnte und warum versuch mal selbe heraus zu finden.
 
Ja ok, ich habe nicht gleich gewusst, wo das Ende vom Taster ist. Aber probieren geht über studieren.
Das Problem war dann nur, dass die erste (Rote Led), gleich brannte, aber das konnte ich mit den Case Werten ausbügeln.
 
Ja, mit drei Led's muss man da schon ein sehr feines Gefühl für die Zwischenzeiten haben. Aber für zwei Anwendungen ist es Realisierbar.
Einfach eine kurze und eine lange Zeit für die zwei Anwendungen. Dann eine etwas längere ( eine Sekunde) zum abschalten.

Ok, jetzt will ich eine Uhrzeit (ohne DCF77) auf verdrahtetem Display bauen. Erst einmal Grundgerüst Sekundentakt, dann hochzählen bis 59. Wie ich dann auf Minute spring, muss ich mir noch überlegen.
 
Hat Bascom afaik alles schon intern. Hab ich aber nie was mit gemacht, weil der DCF77 Empfang hier ein starkes Optimierungsotential bietet.
 
As far as I know. Übersetzt also: "Soweit ich weiß"
Auch gerne genommen:
As far as I remember. Übersetzt: "Soweit ich mich erinnern kann".
 
Weiß ich nichts davon, wo das im Bascom stecken soll. Aber ich möchte ja nur ein bisschen üben. Genau wird ne Uhr sowieso nicht gehen.
 
Och doch. Hängt nur von der Genauigkeit des Quarzes ab.
Hier ist ein Uhrenquarz (=32.768Hz) gemeint! Dieser versorgt (nur) Timer2 (oder welcher auch immer asynchron laufen kann, beim Mega8 ist es halt 2).
Schau mal nach Config Clock und Config DCF77.

So eine Hilfedatei kann manchmal sogar hilfreich sein, wer hätte das gedacht :p
 
Du hast mich falsch verstanden. Ich habe weder einen Uhrenquarz noch ein DCF77 Modul. Ich will einfach nur versuchen, dem Sekundentakt auf 59 hochzählen lassen, dann bei "0" auf Minute springen usw. Es geht mir nur um's Prinzip und die Vorgehensweise. Fertige DCF77 Uhr-Projekte gibt es im Netz genug. Nur verstehen tu ich sie nicht, deshalb fange ich erst einmal so an.
 
Ok, also das Rad neu erfinden. Egal.
Aber ist doch ganz einfach. Das Grundgerüst (mit Tick_1S) hast du ja schon.
Und du kannst ruhig von 59 auf 60 springen lassen, wenn du im selben Atemzug den "Fehler", also den Überlauf erkennst.
Incr Sec
If Sec=60 Then
Sec=0
Incr Min
...
End if
...
Kann man so machen, ist aber für den Controller etwas Rechenarbeit. Eleganter wäre es gleich BCD zu nutzen..

Display hast du ja auch schon mal angesteuert.

Das mit DCF später selbst dekodieren, das würde dich vermutlich etwas überfordern. Da hatte selbst ich meine Probleme mit.
 
das Rad neu erfinden
Ich will nichts neues erfinden. Alles, aber auch wirklich alles, was hier programmiert wird bzw. gelernt wird, gibt es auf dem Markt schon fertig, unkompliziert und billiger (China) zu kaufen. Warum also sich die Mühe machen ----> ich will einfach wissen, wie es erfunden wurde.
 
Nichts Anderes besagt der Spruch.
Kannste ja machen, solltest du hin bekommen eigentlich.
 
Sekunde 60 ist der Fehler, der schnell korrigiert werden muss.
Lauf in Gedanken den Code durch, was würde passieren wenn du 59 abfragst?
 
Wenn Sek. 59 ist, muss im nächsten Schritt / Durchlauf Incr Minute oder Minute+1 erfolgen, wobei Sek wieder von 0 beginnt.
 
Was du jetzt mit "nächstem Durchgang" meinst weiß ich grad nicht, ich hoffe nichts falsches.

Egal. Ist nur die Frage was ist besser lesbar und wie setzt der Compiler es um?


CodeBox BascomAVR
Tick_1s:
   If sec = 59 then
      sec = 0
      min +=1
   else
       sec +=1
   end if
return

oder


CodeBox BascomAVR
Tick_1s:
   sec +=1
   if sec = 60 then
      sec=0
      min +=1
   end if
return

Bewirkt beides das Gleiche. Und da es im Interrupt ist kann dir auch nichts dazwischen funken.

Letzteres macht aus einem anderen Grund viel mehr Sinn, wenn du später als BCD rechnest (so überträgt DCF77 übrigens auch). Da hast du 2 Überläufe.
Digitaltechnik kann mit unserem Base10 nämlich kaum was anfangen und muss ständig hin und her rechnen.
 
Dezimal (base10) und Hexadezimal (base16). Erstmal egal.

Jain. Die Tick_1s wird ja per Interrupt generiert, also befindet sich die CPU quasi im Interrupt Modus. Währenddessen sind standardmäßig andere Interrupts gesperrt. Kann man ändern, sollte man aber nicht, außer es ist zwingend erforderlich (ich kenne keinen einzigen Fall wo das nötig wäre).
Im Regelfall wird nur die Main Loop durch Interrupts "pausiert", eben bis dieser abgearbeitet ist.
 
Jetzt noch eine Frage zu Anzeige vom Display. Wohin packe ich diese Anweisungen hin
Locate 1 , 1
Lcd " Std. Min. Sek."
Locate 2 , 1
Lcd ":"
Muss ja irgendwie angezeigt werden
 
Am sinnvollsten wäre es natürlich so, dass es beim Starten der Anwendung sofort ausgeführt wird, und bei jeder Änderung.
Bei jeder Änderung klingt jetzt nach ISR, aber das wäre sehr blöd, da LCDs lahm wie Sau sind. Bleibt also nur die Main Loop.
Dort drin am Anfang würde beide Konditionen erfüllen.

Auch wenn hier noch eine Unschönheit drin ist, die jetzt aber noch nicht großartig zum Tragen kommt.
Vielleicht kommst du ja selber drauf.
 

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