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
??
Druckbare Version
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 )Zitat:
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???Zitat:
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.Zitat:
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 ein :idea: auf )
Vielleicht lag es auch an meiner Fragestelung, das anfangs nix rauskamm 8-[ . 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)Zitat:
[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?Zitat:
Da war der Timer Lehrgang mit dem alleserklährenden Code doch die besste Antwort ( langsam geht mit ein :idea: auf )
> 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.Zitat:
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 Wort :wink:Zitat:
Ist auf jeden Fall eine schöne Programmieraufgabe.
Den Mein ich:Zitat:
Welchen meinst Du?Zitat:
Da war der Timer Lehrgang mit dem alleserklährenden Code doch die besste Antwort ( langsam geht mit ein auf )
Also z.B.
Gruß teslanikolaZitat:
Code:$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.Zitat:
haste mein Multiplexcode mal angesehen?
Der Code hat Dir also weitergeholfen... grübel.Zitat:
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 :twisted:
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 \:D/ \:D/ \:D/
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....Zitat:
endlich ist es so weit der Code ist fertig \:D/ \:D/ \:D/
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 :Haue
> 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 ...Zitat:
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