Hi Werner,
willst du ihn jetzt aufs Glatteis führen ?
müsste es in deinem Code nicht heissen:
enable interruptS
und fehlt nicht:
enable timer0
enable timer1
und evtl:
start timer0
start timer1
??
Hi Werner,
willst du ihn jetzt aufs Glatteis führen ?
müsste es in deinem Code nicht heissen:
enable interruptS
und fehlt nicht:
enable timer0
enable timer1
und evtl:
start timer0
start timer1
??
@werner_just
OK ich sehs ja aber deine letzten "Hilfen" brachten mich nicht weiter ( trotzdem Danke )Wozu ICH nicht bereit bin, und das Thema hatten wir hier schonmal, ist Deine Arbeit zu machen. Ich erkläre Dir gerne wie man mit Interrupts umgeht, ich schaue auch gerne mal über Deinen Code und gebe meinen Senf dazu was man imo besser oder anders machen könnte. Aber Programmieren musst Du Dein Programm schon selbst.
Ich zitiere:
Sei doch mal ehrlich, ist das nicht was man als erstes macht???Suche in der BASCOM-Hilfe
Diese Info brachte mir genau so viel, hatte glaube vorher erwähnt, das ich mich mit dem Timer/Counter NICHT auskenne.Stop Timer 0
Timer0 = 218
Start Timer0
Start Timer1
Do
Loop Until Interrupt_Zähl_Variable = 39
Stop Timer1
Stop Timer0
Da war der Timer Lehrgang mit dem alleserklährenden Code doch die besste Antwort ( langsam geht mit einauf )
Vielleicht lag es auch an meiner Fragestelung, das anfangs nix rauskamm. Aber jetzt hab ichs geblickt (das mit dem auslesen /zusammen Spiel)
Werde mich mal ans Programmieren machen ( Wochenende ), währst du dann vielleicht bereit mein Code zu korrigieren? Die Arbeit hatte ja dan ich.
Ach eine Frage, geht es ,dass ich das Ergebnis anzeige ( Multiplex[Code siehe Seite 1{Geb ruhig deinen Senf dazu}]) und GLEICHZEITIG Messe, denn so wie ich euch verstanden hab hat ja der Timer nix mim Programm zu tun ( Außer Auslese ).
Gruß teslanikola
Hallo Gast,
sorry Teslanikola,
> willst du ihn jetzt aufs Glatteis führen ?
war nicht meine Absicht aber Du hast natürlich recht.
>enable interruptS
>enable timer0
>enable timer1
sowas passiert wenn man abends nur noch mal eben seine privaten emails abrufen will und dann doch noch ins Forum guckt. War zu dem Zeitpunkt schon 17h auf den Beinen. Soll man nicht machen sowas!
>und evtl:
>start timer0
>start timer1
Timer brauchen nicht explizit gestartet zu werden. Sie starten nach der initialisierung automatisch. "start timer" wird nur benötigt wenn er vorher mit "stop timer" explizit angehalten wurde. Es stört aber auch nicht wenn "start timer" drin steht.
Ciao,
Werner
Halo Teslanikola,
> OK ich sehs ja aber deine letzten "Hilfen" brachten mich nicht weiter
> ( trotzdem Danke )
hm, ein kleiner Hinweis wo Du nicht durchblickst?
Es ging nur darum wie man die 0,1469 der benötigten 38,1469 Timer-Überläufe realisiert. (Für 1s Torzeit bei 8bit Timer, 10MHz Takt und Prescale = 1024)[Beispiel "vorsetzen des Timers"]
Diese Info brachte mir genau so viel, hatte glaube vorher erwähnt, das ich mich mit dem Timer/Counter NICHT auskenne.
Welchen meinst Du?Da war der Timer Lehrgang mit dem alleserklährenden Code doch die besste Antwort ( langsam geht mit einauf )
> währst du dann vielleicht bereit mein Code zu korrigieren?
Das hab ich Dir ja angeboten. Andere gucken hoffentlich auch drüber, sonst passiert wieder sowas wie beim Beispiel gestern abend. Sorry falls Du viel Zeit damit vertrödelt hast.
Stimmt, die Timer laufen völlig unabhängig vom Programm. Nur die Interrupts und das Auslesen verbrauchen etwas Programmzeit.Ach eine Frage, geht es ,dass ich das Ergebnis anzeige ( Multiplex[Code siehe Seite 1{Geb ruhig deinen Senf dazu}]) und GLEICHZEITIG Messe, denn so wie ich euch verstanden hab hat ja der Timer nix mim Programm zu tun ( Außer Auslese ).
Du kannst daher Messen und gleichzeitig Ausgeben. (Wobei man bei einem Frequenzzähler nicht unbedingt merken würde wenn er das nacheinender macht) Ist auf jeden Fall eine schöne Programmieraufgabe.
Ciao,
Werner
Hallo Werner, haste mein Multiplexcode mal angesehen?
Das glaub ich dir auf WortIst auf jeden Fall eine schöne Programmieraufgabe.![]()
Den Mein ich:Welchen meinst Du?Da war der Timer Lehrgang mit dem alleserklährenden Code doch die besste Antwort ( langsam geht mit ein auf )
Also z.B.
Gruß teslanikolaCode:$regfile = "M8def.dat" Dim Var1 as Byte Dim Var2 as Byte On Timer0 Test1 On Timer1 Test2 Enable Interrupt Config Timer0 = Timer, Prescale = 1 Config Timer1 = Timer, Prescale = 1 Do loop Test1: incr Var1 Return Test2: incr Var2 Return
Hallo Teslanikola,
Ich hab zwar mal über den Multiplex-Thread geguckt, aber Deinen Code hab ich nicht gefunden. Vielleicht war ich aber auch einfach nur blind.haste mein Multiplexcode mal angesehen?
Der Code hat Dir also weitergeholfen... grübel.Dim Var1 as Byte
Dim Var2 as Byte
[...]
Prima, dann lasse ich in Zukunft immer ein paar wesentliche Sachen weg und dann passt das schon![]()
Spaß beiseite, freut mich daß Du trotz meiner Fehler damit etwas anfangen konntest.
Ciao,
Werner
hallo werner,
Denn Code mein ich.Code:$regfile = "2313def.dat" $crystal = 10000000 Config Portb = Output Config Portd = Output Dim A As Byte Dim S As String * 5 Dim X As Byte Dim Pos As Byte Dim Z As String * 1 Dim L As Byte Do S = Str(w) L = Len(s) For A = 0 To 10 For X = 1 To L S = Str(w) Pos = L - X Pos = Pos + 1 Z = Mid(s , Pos , 1) If Z = "0" Then Portb = 63 If Z = "1" Then Portb = 34 If Z = "2" Then Portb = 94 If Z = "3" Then Portb = 118 If Z = "4" Then Portb = 99 If Z = "5" Then Portb = 117 If Z = "6" Then Portb = 125 If Z = "7" Then Portb = 38 If Z = "8" Then Portb = 127 If Z = "9" Then Portb = 119 If X = 1 Then Portd = 1 If X = 2 Then Portd = 2 If X = 3 Then Portd = 4 If X = 4 Then Portd = 8 If X = 5 Then Portd = 16 If L = 1 Then Waitus 9996 If L = 2 Then Waitus 4996 If L = 3 Then Waitus 3327 If L = 4 Then Waitus 2496 If L = 5 Then Waitus 1996 Next X Next A Loop
Grüßle
Hallo Werner,
endlich ist es so weit der Code ist fertig \/ \
/ \
/
Hier der Code ( hoffe du bist zufrieden ):
Bitte kontollieren!Code:$regfile = "2313def.dat" Dim Var1 As Byte Dim Var2 As Byte Dim Freq As Integer Dim Tim As Long Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Counter , Edge = Rising Config Pinb.5 = Input Portb.5 = 0 On Timer0 Test1 On Timer1 Test2 Enable Interrupts Mess: Timer0 = 550 Timer1 = 0 Start Timer0 Start Timer1 Do ' Hier Zeige ich Tim an loop Test1: Incr Var1 If Var1 = 9 Then Freq = Timer1 Tim = Var2 * 1024 Freq = Tim + Freq Var1 = 0 Var2 = 0 Stop Timer0 Stop Timer1 Goto Mess End If Return Test2: Incr Var2 Return
Gruß teslanikola
Hallo Teslanikola,
äh....endlich ist es so weit der Code ist fertig \/ \
/ \
/
Hier der Code ( hoffe du bist zufrieden ):
> Bitte kontollieren!
wird heute und morgen nichts mehr werden. So 'nen Lappsus wie gestern möchte ich möglichst vermeiden und morgen bin ich auf Messfahrt.
Aber 10 Minuten hab ich![]()
> Timer0 = 550
- Interessant das der Compiler nicht mosert wenn einer 8 bit Register ein Wert > 255 zugewiesen wird.
- Dann schau Dir den Post von "Gast" nochmal an. Stichwort "Lappsus"
- Wie kommst Du auf den Wert 9 in "If Var1 = 9 Then"
- Wie wo was ist Tim?
- unabhängig davon, Tim ist long, Freq ist integer
"Freq = Tim + Freq" passt irgendwie nicht so richtig.
[0...+-2^15] = [0...2^32] + [0...+-2^15]
Ciao,
Werner
P.S. Wie der BASCOM-Simulator funktioniert weißt Du?
ach sch*** das erklärt auch die var1 = 9 then ...Timer0 = 550
- Interessant das der Compiler nicht mosert wenn einer 8 bit Register ein Wert > 255 zugewiesen wird.
muss eigentlich so heisen
If var1 = 38 then ... ( anzahl der überläufe zur Sek)
Tim ist : counter ( timer1) und die anzahl der "Überläufe"*255
also gesammtcounts
Muss ich gleich mal verbessern
Gruß
Ps des mit den Simulieren kann ich nur teils
Lesezeichen