Mein erstes Bascom Projekt !!

Status
Für weitere Antworten geschlossen.
Hallo !

Na also.... nun wird es doch langsam etwas. :)

Das Prinzip sieht schon gut aus.
Es fehlt aber noch eine Kleinigkeit, wenn du dir das Programm mal genau ansiehst.

Vielleicht kommst du ja drauf, wenn wir einen zweiten Zaehler einbauen. ;)
Nennen wir den zweiten Zähler mal "Zaehler2". :D

Zaehler2 (als Byte erst mal ausreichend) wird nun auch immer um eins erhöht, wenn das LCD aktualisiert wurde.
Die Ausgabe für den Zaehler2 setzen wir in die untere Zeile, ab dem ersten Segment.

Vielleicht findest du ja beim "umbauen" schon den Fehler in deinem Programm.
Wenn das so ist, musst du das nicht extra schreiben.
Ändere das Programm so um, dass hinterher beide Zähler untereinander stehen.

Wenn alles richtig ist, müssten beide Werte synchron hochzählen, oder? ;)

Zur besseren Lesbarkeit, würde ich VOR den Variablenwerten der Zähler noch die Angaben machen:
Zeile 1: Zaehler 1 = "Zaehler1" (bitte den Variablenwert anzeigen lassen!)
Zeile 2: Zaehler 2 = "Zaehler2" (bitte den Variablenwert anzeigen lassen!)


Wenn du aber nun momentan noch arbeiten musst, dann kümmere dich erst mal darum!
Kannst ja in der Mittagspause mal ein wenig "spielen". ;)

Gruß,
Cassio
 
Na hoffe, daß ich alle verstanden habe.

Ich wusste , wenn es im ersten Beispiel um die Sekunden geht, dass wenn es um die Minuten geht was machen muss...war daß die Aufgabenstellung ? als Zaehler2 ??

Habe folgendes gedacht ....aber !!!!

Code:
$regfile = "m8def.dat"
   $crystal = 16000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100
   $sim
   Dim Zaehler1 As Byte                                     'Der Zähler
   Dim Zaehler2 As Byte
   Dim Flag_zaehler As Byte                                 'Der "Merker"
   Dim Sekunde As String * 2                                'Ausgabe


   Cls

   Config Timer1 = Timer , Prescale = 256                   'Timer
   On Timer1 Timer_isr                                      'Springe zu Sub
   Enable Timer1
   Timer1 = 3035
   Enable Interrupts


   Sekunde = Str(zaehler1)                                  'Formatfunktion für die Ausgabe
   Sekunde = Format(sekunde , "00")

   Flag_zaehler = 0                                         ' Setze auf Null damit man sehen kenn on das Ergebins verändert wurde

   Do
   If Flag_zaehler = 1 Then                                 'Wenn das Flag  durch den Timer geändert wurde dann
      Locate 1 , 1
      Lcd Sekunde                                           'Ausgabe
         If Flag_zaehler = 1 Then                           'Wenn Flagzaähler erhöht wurde dann
            Zaehler2 = Zaehler2 + 1                         'Zähler 2 erhöhen
         End If
   End If                                                   'Raus

   Loop
                                                      'widerholen

   'Submenu
    Timer_isr:
    Incr Zaehler1
    Timer1 = 3036
    Flag_zaehler = 1                                        'Beim zählen Variable auf 1
    Return

meine If Verschachtelung finde ich Käse...

Ich müsste es "irgendwie" so formulieren...

wenn Flag ist 1 ( Wenn nicht dann end If ) dann schreibe LCD UND erhöhe Zaehler2

Verständnisfrage :

Mit dem Flag habe schon kapiert, aber was ist der GROSSE Unterschied zum Original Uhr Code ?

Noch etwas

"Zur besseren Lesbarkeit, würde ich VOR den Variablenwerten der Zähler noch die Angaben machen:
Zeile 1: Zaehler 1 = "Zaehler1" (bitte den Variablenwert anzeigen lassen!)
Zeile 2: Zaehler 2 = "Zaehler2" (bitte den Variablenwert anzeigen lassen!)"

verstehe ich nicht ganz was Du meinst Bsp : ???

THX
Uhr Code ?

Wo liegt das Vorteil ( denke an Uhr ..LoL ) ob ich später die Flags zählen muss oder einfach Zähler generiere..ich weiss nicht zuviel denken...
 
Hallo !

Nun lass doch eeeeeendlich mal deine Sekunden und Minuten aus dem Kopf!

Es geht hier um zwei Zähler, die an verschiedenen Stellen hochgezählt werden und trotzdem das Gleiche anzeigen müssen.
Also nix mit Sekunden und Minuten! ;)

Verständnisfrage :

Mit dem Flag habe schon kapiert, aber was ist der GROSSE Unterschied zum Original Uhr Code ?

Wenn ich mir deinen Code so ansehe dann würde ich nicht sagen, dass du den Sinn eines Flags schon kapiert hast. ;)



Wenn du heute Abend zu Hause bist, dann spiel dein Programm mal auf den AVR und schaue dir den Spaß mal an.
Ich gebe zu, als Anfänger ohne "Praxiskontrolle" etwas zu entwickeln ist seeeehr schwer!

Nehmen wir noch mal deine erste Version:
Code:
Do 

If Flag_zaehler = 1 Then  
Locate 1 , 1 Lcd Sekunde    
End If        

Loop         


'Submenu 
Timer_isr: 
Incr Zaehler1 
Timer1 = 3036 
Flag_zaehler = 1 'Beim zählen Variable auf 1 
Return

Was passiert hier.....
In der "Timer_isr" wird "Zaehler1" inkrementiert (also um eins erhöht).
Dann setzt du das Flag (Flag_Zaehler, ich hätte es ja LCD-FLag genannt, aber OK) auf 1 !

Soweit, so gut! :)

In der Hauptschleife gibt es die Bedingung:
Wenn Flag_zaehler = 1, dann zeige eine Stringvariable an. :eek:

Zum Ersten:
Diese Byte in Stringkonvertierung lässt du einfach mal weg!
Warum?
Du konvertierst zwar mit
Code:
Sekunde = Str(zaehler1) 'Formatfunktion für die Ausgabe 
Sekunde = Format(sekunde , "00"
die Byte-Variable "Zaehler1" in eine Stringvariable "Sekunde",
dies aber nur EINMAL!
Nämlich ein einziges Mal VOR der Hauptschleife.

Um das Lernen zu erleichtern, lassen wir zukünftig dies olle Konvertieren von Bytes in Strings nun erst mal beiseite!


Machen wir aber erst mal weiter.....
OK, selbst wenn du die Konvertierung richtig angegeben hättest und auf deinem Display nun der Wert der Variable "Sekunde" erscheinen würde......
Wer sorgt nun dafür, dass beim nächsten Durchlaufen der Do-Loop Schleife nicht schon wieder das Display den Wert der "Sekunde" anzeigen muss? :hmmmm:


Wenn du dir mal überlegst, wie der arme AVR mit 16MHz am rennen ist....
Theoretisch würden 1MHz interner Takt völig ausreichen! Tja und das wäre immer noch viel zu schnell für die Anwendung. ;)
Dies ist aber ein anderes Thema und gehört hier nun überhaupt nicht her!

Es knastet dein AVR nun mit 16MHz...... und die Do-Loop Schleife wird nur für wenige Sekundenbruchteile von der "Timer_isr" unterbrochen.
Findest du nicht, dass dein LCD in einer Sekunde unnötig viele Anweisungen bekommt, permanent den selben Inhalt einer Variable darzustellen?

Es fehlt also noch etwas in deinem Programm was dafür sorgt, dass dein LCD nicht unnötig genervt wird. ;)

Na? Beim Lesen schon eine Idee bekommen?

Gruß,
Cassio


PS:
Und lass (erst mal) dieses olle Konvertieren der Bytes!
 
Ups...

erstmal ,klar es sollte so heissen :

Code:
Locate 1 , 1    'Position
Lcd Sekunde   'Inhalt

beim Ctrl+C Ctrl+V ist etwas schiefgegangen

( wie machst so ein schönes Zitat ? )

Dann bitte den Sinn des Flags erklären..ich verstehe es so:

Wäre so ein Art Indikator welcher 2 Zustände hat 1 oder 0

Ja gebe ich Dir Recht mit der Konvertirerei bin ja nicht so ganz fit, habe bei der Uhr ( schon wieder :eek: ) Stunden damit verbracht, etwas richtiges anzeigen zu lassen oder der Compiler hat ständig gemeckert...

Tja schön wäre es, wenn der Simulator richtig funktionieren würde...Ich hatte schon etwas darüber geschrieben, ich dachte das Teil geht, aber nach 30 Min hat er doch was angezeigt, unheimlich langsam !! anyway

Tja zurück zum Thema LCD....ich dachte schon am Anfang ob es sinnvoll wäre die komplette Ausgabe in eine SUB auslagern...bloss ich weiss nocht nicht ob es besser ist, wobei ich denke langsam ja...deshalb wäre gut wenn ich erstmal ein Programmstruktur hätte wo was passieren soll...danach ist die Umsetzung einfacher...aber ich verstehe auch daß Du mich "hinführen" möchtest..deshalb nochmal herzlich Dank für Deine nette Unterstüzung !!
 
....ich dachte schon am Anfang ob es sinnvoll wäre die komplette Ausgabe in eine SUB auslagern...bloss ich weiss nocht nicht ob es besser ist, wobei ich denke langsam ja...

Hallo!

Es gibt kein Richtig oder Falsch beim Programmaufbau.
Es gibt vielleicht effektive Lösungen und nicht so Effektive. Das war es aber schon.

Wenn du es in deinem Programm für sinnvoll und einfacher hältst für die LCD-Ausgabe eine eigene SUB zu schreiben, dann mach das doch!



deshalb wäre gut wenn ich erstmal ein Programmstruktur hätte wo was passieren soll...danach ist die Umsetzung einfacher...

Ach komm schon... wir sind doch nicht mehr in der Grundschule! ;)
In der 4. Klasse Grundschule bekommst du die Aufgabe:
Addiere die Ergebnisse der beiden Aufgaben: 500-250 und 891+9
Ergebnis=

Ab der 5. Klasse heißt es dann:
Addiere die Differenz von 250 und 500 zu der Summe aus 9 und 891!
Ergebnis=

Die Programmstruktur habe ich dir schon zweimal geschrieben.
Wie du das nun lösen möchtest, ist doch ganz allein deine Überlegung!
Denn schließlich..... ein Richtig oder Falsch gibt es beim Programmaufbau nicht. ;)

Gruß,
Cassio
 
Hallo!

Es gibt kein Richtig oder Falsch beim Programmaufbau.
Es gibt vielleicht effektive Lösungen und nicht so Effektive. Das war es aber schon.

Ich denke wenn der Aufbau von Anfang an schlecht ist, dann funzt nacher die Snooze Taste nicht mehr....oder mann muss grosse klimbim machen.

ich werde mal daheim mit Subs probieren, es sei denn, hast einen erprobten Vorschlag...;)
 
Hi !

Ich habe mal etwas in den tiefen meines Rechners gesucht........... und auch etwas gefunden. ;)

So einen Wecker, wie du ihn programmieren und vielleicht auch bauen möchtest, habe ich auch mal entworfen. :)
Ich hatte eine alte LED-Anzeige hier rumliegen und mir überlegt, dass ich damit auch einen Wecker selber bauen kann.
So sah der Schaltplan dazu aus:
LED-Wecker.gif

Am guten Stück konnte man die Uhrzeit, den Alarm und den Wochentag einstellen.
Der Alarm war nur Mo-Fr aktiv und durch einen Piezo-Pieper realisiert.
Am Wochenende war aber automatisch Ruhe.
Obendrein wurde alle 20sec. die Raumtemparatur ermittelt und angezeigt.
Der Systemtakt beträgt 4MHz extern und die Uhr läuft mit einem Uhrenquarz.

Die Taster für "Alarm OFF" und "Snooze" funktionierten immer, auch wenn gerade die Temperatur angezeigt wurde.
Wenn man innerhalb der Snoozezeit auf "Alarm OFF" gedrückt hat, wurde die Snoozezeit beendet und der Alarm sofort abgeschaltet.


Du siehst also, deine Idee hatten vorher auch schon Andere. ;)
Tja und programmtechnisch funktioniert das auch alles.
Glaube aber nicht, dass mir das Programm mal eben nebenbei eingefallen ist.
Es begann mit einer Grundstruktur und dann kamen immer mehr Teile hinzu.
Wichtig ist nur, dass die Basis stimmt und du darauf aufbauen kannst!

Ach so...... vergiss es!
Frag mich gar nicht erst nach dem Programm. ;)

Es würde dir sowieso nicht helfen..... eher durcheinander bringen.
Da es sich um eine alte ausgebaute LED-Anzeige handelt (mit sehr ungewöhnlicher Segmentverdrahtung), ist die Programmierung schon sehr speziell.

Gruß,
Cassio
 
Respekt...Nicht schlecht...

Frag mich gar nicht erst nach dem Programm.

Wollte auch nicht, aber wollte etwas über meine Hintergründe erzählen....

Ich habe schon einiges Nachgebaut an Uhren, Wecker usw...
s-huehn hat einige tolle Sachen. habe damals alles in gefrässte hochtransparte Gehäusen eingebaut sogar mehrere gebaut für Verwandte und Freunde.

Bei jeder Uhr hat meine Frau Verbesserungvorschläge gemacht.

Gehäuse zu gross, nur eine Alarmezit, kein Snooze, und vorallem gepiepse Alarmton usw...Mein letzter Wecker hat DCF Empfang und Melodie aber keine Snooze funktion, Musik laut..etc..

Aus diesen Gründen habe mich entschlossen die Ultimative Uhr /Wecker selber
zu bauen !!!

Modus über Poti, Alarm Lautsärke langsam ansteigend, snooze, 2 Alarmzeiten
DCF Empfang..tja es gibt einiges zu tun...
 
Aus diesen Gründen habe mich entschlossen die Ultimative Uhr /Wecker selber
zu bauen !!!

Hi !

Nun ja, DEN ultimativen Wecker gibt es doch gar nicht, oder?
Es fällt einem nach der Fertigstellung doch immer wieder etwas Neues ein. ;)

Um der Problematik mit dem Piepston aus dem Weg zu gehen, habe ich mal folgendes gebaut:
Klickst du HIER ! :)

Etwas weiter unten gibt es eine kleine Beschreibung der Funktionen.

Gruß,
Cassio
 
RESPEKT !!!

Naja eines Tages, hoffe ich werde ich mal soweit sein , daß ich nicht nur nachbauen kann, sondern auch programmieren...

Wenn ich zu Hause bin, zeige ich Dir Bilder von meiner Sachen...::)

aber ich gebe auch ehlrich zu die sind nachgebaut..

Von der hier habe ich 4 Stck gebaut ( Lochraster )
http://s-huehn.de/elektronik/wohnuhr/wohnuhr.htm

Noch etwas neben bei....Wenn ich eine Menüsteuerung ( später ) über "poti oder ähnliches machen möchte ist sowas das richtige dafür :

http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=B29;GROUPID=3714;ARTICLE=73921;START=0;SORT=artnr;OFFSET=16;SID=31rzB2E6wQAR8AACDk@wYb98f5a7e2ecdbb9016d29eb0b3727ed8
 
Hallo!

Schöne Bilder und gelungene Gehäuse!
Damit habe ich immer so meine Probleme. Elektronik ist ja gut und schön, aber Gehäuse und ich.... da treffen zwei Welten aufeinander. :rolleyes:
Habe noch keine vernünftigen und optisch ansprechenden Gehäuse gefunden.
Tja und selber bauen...... vielleicht später mal. ;)


Noch etwas neben bei....Wenn ich eine Menüsteuerung ( später ) über "poti oder ähnliches machen möchte ist sowas das richtige dafür :

Drehencoder bei Reichelt

Jepp! :)
Ein Drehencoder ist dann genau das was du dafür brauchst.
Hatte schon Panik bekommen, als du etwas von Poti geschrieben hast. ;)

Da sind wir aber noch nicht.....

Hast du deine Programme nun mal live ausprobiert?
Sind dir mindestens meine Punkte aufgefallen?
Wie sieht denn die neue Strategie aus?

Gruß,
Cassio


Ach so.....
Du wolltest doch wissen, wie man so schöne Zitate erstellt.
Einfach in dem passenden Beitrag rechts unten auf die Schaltfläche "ZITIEREN" klicken
quote.gif

Dann kannst du antworten und der gesamte Beitrag wird als Zitat eingefügt.
Natürlich kannst du das Zitat dann kürzen und nur das Wesentliche stehen lassen. ;)
Kannst es ja mal ausprobieren!
 
Schlechte Nachrichten....

klaro das Proggi funzt nicht, bin aber seit erst halbe Stunde dran..hatten wir Besuch...

Wegen Gehäuse, können wir später drüber reden....

Wir haben Makrolon in der Fa. ...Kumpel kann die Platten fräzen...
 
Hallo,

RESPEKT !!!

Naja eines Tages, hoffe ich werde ich mal soweit sein , daß ich nicht nur nachbauen kann, sondern auch programmieren...
wie heißt es so schön ...
"Jeder Weg beginnt mit einem ersten Schritt" oder so :D
Und hier haben alle mal klein angefangen und über Fehler geflucht.

In irgendeinem Buch (glaube ich) für Perl-Programmierung hab ich mal was
gelesen : Es ist egal wie du eine Aufgabe in einem Programm löst. Wenn das
Programm das tut was du willst und wofür es gedacht war dann ist das
Programm richtig.

Wenn ich zu Hause bin, zeige ich Dir Bilder von meiner Sachen...::)

aber ich gebe auch ehlrich zu die sind nachgebaut..

Von der hier habe ich 4 Stck gebaut ( Lochraster )
http://s-huehn.de/elektronik/wohnuhr/wohnuhr.htm
Die Seite von Scott-Falk Hühn ist klasse. Da hab ich meinen ersten Progger
für den Parallelport nachgebaut und auch das Assembler-Blink-Programm
als Basis für die 4Kanal-PWM des ersten Projektes verwendet. Die Seite
ist hier zu finden ... AVR-Programmierung (alte Seite)

Noch etwas neben bei....Wenn ich eine Menüsteuerung ( später ) über "poti oder ähnliches machen möchte ist sowas das richtige dafür :

http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=B29;GROUPID=3714;ARTICLE=73921;START=0;SORT=artnr;OFFSET=16;SID=31rzB2E6wQAR8AACDk@wYb98f5a7e2ecdbb9016d29eb0b3727ed8
Ja geht. Ist nen Drehencoder. Da gibts in Bascom extra nen Befehl für.

Gruß
Dino
 
Nun der Zähler1 läuft ;)

Folgende Fehler hatte ich drin :

Zähler1 war als String definiert, habe auf Byte geändert, so geht es auch ohne Format..hast recht...:D

Code:
$crystal = 16000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100
   Dim Zaehler1 As Byte                                     'Der Zähler
   Dim Zaehler2 As Byte
   Dim Flag_zaehler As Byte                                 'Der "Merker"
   Dim Sekunde As Byte                                      'Ausgabe

   Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
      Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
   Config Lcd = 16 * 2
   Cls
   Cursor Off

   Cls

   Config Timer1 = Timer , Prescale = 256                   'Timer
   On Timer1 Timer_isr                                      'Springe zu Sub
   Enable Timer1
   Timer1 = 3035
   Enable Interrupts


   Sekunde = 00
   Flag_zaehler = 0
                                         ' Setze auf Null damit man sehen kenn on das Ergebins verändert wurde
   Do
   If Flag_zaehler = 1 Then
   Sekunde = Sekunde + 1
   Wait 1                                                   'Wenn das Flag  durch den Timer geändert wurde dann
      Locate 1 , 1
      Lcd Sekunde
      Locate 2 , 1
      Lcd Flag_zaehler                                      'Ausgabe
   End If                                                   'Raus

   Loop
                                                      'widerholen

   'Submenu
    Timer_isr:
    Incr Zaehler1
    Timer1 = 3036
    Flag_zaehler = 1                                        'Beim zählen Variable auf 1
    Return

wo ich noch grübele...ich habe erwartet, daß in der zweiten Zeile einen 0-1-0
erwartet, steht ständig auf eins...habe zwar mit wait probiert..nichts...

Nun sollte ich den 2 Zähler machen

ich stehe auf dem Schlauch, also der Zähler2 soll getriggert werden wenn auf dem LCD ein neuer Wert erscheint, bzw."sekunde" hochgzählt wurde..richtig ? habe momentan keine Ahnung, wie ich "Änderung" erfassen kann...ist bestimmt einfach..
 
Habe LCD Ausgabe in SUB gepackt..

Code:
   $regfile = "m8def.dat"
   $crystal = 16000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100
   Dim Zaehler1 As Byte                                     'Der Zähler
   Dim Zaehler2 As Byte
   Dim Flag_zaehler As Byte                                 'Der "Merker"
   Dim Sekunde As Byte                                      'Ausgabe

   Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
      Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
   Config Lcd = 16 * 2
   Cls
   Cursor Off

   Cls

   Config Timer1 = Timer , Prescale = 256                   'Timer
   On Timer1 Timer_isr                                      'Springe zu Sub
   Enable Timer1
   Timer1 = 3035
   Enable Interrupts


   Sekunde = 00
   Flag_zaehler = 0
                                         ' Setze auf Null damit man sehen kenn on das Ergebins verändert wurde
   Do
   If Flag_zaehler = 1 Then
   Sekunde = Sekunde + 1
   Gosub Lcd
   End If                                                   'Raus

   Loop
                                                      'widerholen

   'Submenu
    Timer_isr:
    Incr Zaehler1
    Timer1 = 3036
    Flag_zaehler = 1                                        'Beim zählen Variable auf 1
    Return

    Lcd:
    Wait 1                                                   'Wenn das Flag  durch den Timer geändert wurde dann
      Locate 1 , 1
      Lcd Sekunde
      Locate 2 , 1
      Lcd Flag_zaehler                                      'Ausgabe
   Return
 
Hallo!

Kleinigkeiten:

1. nach dem Loop folgt ein End - Bascom möchte das so!
2. der erste Befehl nach dem Einsprung in die Timerroutine ist
Timer1 = 3036 - hatte ich schon mal wo erwähnt
3. Wo setzt Du Das Flag wieder zurück?

MfG
caargoo
 
Hallo sulawesi!

Ich weiß wirklich nicht mehr, wie ich es erklären soll!
Bis jetzt waren meine methodischen und didaktischen Fähigkeiten gar nicht schlecht...... aber hier verzweifel ich so langsam. :eek:

Bevor wir noch 100 Beiträge benötigen um die Aufgabenstellung zu beschreiben, greife ich mal ein wenig vor. ;)
Ich weiß ja nicht, was du für einen Beruf hast und vielleicht setze ich einfach zuviel voraus.....

Ich nehme mal dein letztes Programm als Basis:
Wenn ich etwas auskommentiert habe, dann siehst du das am "-----"
Neue Zeilen stehen meist am Anfang und sind nicht eingerückt!



CodeBox bascom

$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
Dim Zaehler1 As Byte 'Der Zähler
Dim Zaehler2 As Byte
'----Dim Flag_zaehler As Byte 'Der "Merker"
Dim Lcd_flag As Bit 'Merker für die LCD-Ausgabe
'-----Dim Sekunde As Byte 'Ausgabe

Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Cls
Cursor Off

'-----Cls

Config Timer1 = Timer , Prescale = 256 'Timer
On Timer1 Timer_isr 'Springe zu Sub
Enable Timer1
'-----Timer1 = 3035
Timer1 = 3036
Enable Interrupts


'----Sekunde = 00
'----Flag_zaehler = 0
' Setze auf Null damit man sehen kenn on das Ergebins verändert wurde

Do
'----If Flag_zaehler = 1 Then
'----Sekunde = Sekunde + 1

If Lcd_flag = 1 Then
Incr Zaehler2
Gosub Lcd
Else
End If 'Raus

Loop
'widerholen
End

'Submenu
Timer_isr:
Stop Timer1

'----Flag_zaehler = 1 'Beim zählen Variable auf 1
Lcd_flag = 1
Incr Zaehler1

Timer1 = 3036
Start Timer1
Return


Lcd:
'----Wait 1 'Wenn das Flag durch den Timer geändert wurde dann

Locate 1 , 1
'----Lcd Sekunde
Lcd "Zaehler1 = " ; Zaehler1

Locate 2 , 1
'----Lcd Flag_zaehler 'Ausgabe
Lcd "Zaehler2 = " ; Zaehler2

Lcd_flag = 0
Return




Ich hoffe, ich habe mich nun auf die Schnelle nicht vertan, denn das Programm habe ich hier im Fenster editiert und nicht in Bascom. ;)

Kannst es ja mal ausprobieren.....
Sollten Fehler auftauchen, sag mir bitte bescheid. ;)

Wenn es funktioniert, dann schreiben wir mal über die wichtigsten Änderungen. :)

Gruß,
Cassio
 
Ups..end hatte vergessen..

Aber trotzdem der Flag_zaehler tut nicht

Code:
 $regfile = "m8def.dat"
   $crystal = 16000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100
   Dim Zaehler1 As Byte                                     'Der Zähler
   Dim Zaehler2 As Byte
   Dim Flag_zaehler As Byte                                 'Der "Merker"
   Dim Sekunde As Byte                                      'Ausgabe

   Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
      Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
   Config Lcd = 16 * 2
   Cls
   Cursor Off

   Cls

   Config Timer1 = Timer , Prescale = 256                   'Timer
   On Timer1 Timer_isr                                      'Springe zu Sub
   Enable Timer1
   Timer1 = 3035
   Enable Interrupts


   Sekunde = 00
   Flag_zaehler = 0
                                         ' Setze auf Null damit man sehen kenn on das Ergebins verändert wurde
   Do
   If Flag_zaehler = 1 Then
   Sekunde = Sekunde + 1
   Gosub Lcd
   End If                                                   'Raus

   Loop
   End                                                      'widerholen

   'Submenu
    Timer_isr:
    Timer1 = 3036
    Incr Zaehler1
    Flag_zaehler = 1                                        'Beim zählen Variable auf 1
    Return

    Lcd:
    Wait 1                                                   'Wenn das Flag  durch den Timer geändert wurde dann
      Locate 1 , 1
      Lcd Sekunde
      Locate 2 , 1
      Lcd Flag_zaehler
      Flag_zaehler = 0                                      'Ausgabe
   Return
 
Status
Für weitere Antworten geschlossen.

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