Du weißt schon, dass aktuell die Version 2.0.7.6 raus ist, also 3 Generationen weiter.
Druckbare Version
Du weißt schon, dass aktuell die Version 2.0.7.6 raus ist, also 3 Generationen weiter.
Ich habe den Code jetzt trotz des angeblichen Fehlers geflasht. Nun macht mein Controller (oder ein anderes Bauteil) extrem merkwürdige Geräusche (so eine Art brummen).
Werde gleich den stark vereinfachten Code mal versuchen hier ins Board zu bekommen.
Viele grüße
Dominik
Edit: Oh, das wusste ich nicht. Sollte ich die. Erosion updaten?
Bisher hatte i h nämlich nie Probleme mit der Version
Ok, bascom meldet keinen Fehler mehr. Irrlicht sollte ich trozdem bald mal updaten.
Sobald das Programm auf dem mega32 ist fängt der laut an zu Brummen (zumindest glaube ich, dass du Brummen. Im Mega kommt). Irgendwas ist da falsch.
- - - Aktualisiert - - -
So, hier ist mal der Code. Hab ihn auf ne CD gebrannt und jetzt von nem anderen Rechner hochgeladen:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
' Variablen für die Uhrzeit
Dim Hilfswert_sekunden As Byte
Dim Sekunden As Byte
Dim Minuten As Byte
Dim Stunden As Byte
Dim Wochentag As Byte
Wochentag = 1
Led Alias Portc.0
Config Led = Output
Dim Z As Single
Dim I As Long
Dim N As Integer
Dim Ton As Integer
' Timer 2 für die Uhrzeit einstellen und starten
Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1 , Compare = Toggle
Compare2 = 124
On Oc2 Isr_von_timer2:
Enable Compare2
'Enable Timer2
'On Timer2 Isr_von_timer1
'Enable Interrupts
'Load Timer2 , 250
'Start Timer2
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print "**** RN-CONTROL 1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print "Weitere passende Zusatzboards bei www.robotikhardware.de"
Do
If Hilfswert_sekunden = 125 Then
Print ; Wochentag ; " - " ; Stunden ; ":" ; Minuten ; ":" ; Sekunden ; ""
Incr Sekunden
Hilfswert_sekunden = 0
Toggle Led
End If
If Sekunden = 60 Then
Sekunden = 0
Incr Minuten
End If
If Minuten = 60 Then
Minuten = 0
Incr Stunden
End If
If Stunden = 24 Then
Stunden = 0
Incr Wochentag
End If
If Wochentag = 8 Then
Wochentag = 1
End If
Loop
' Funktion die mit Timer 2 verbunden ist
' Ist nötieg um aktuelle Uhrzeit auszugeben
Isr_von_timer2:
Incr Hilfswert_sekunden
Return
End
Hallo Dominik,
der Lautsprecher brummt, weil du den an PortD.7 dran hast, wo auch das Signal OC2 raus kommt. Und das hat 62Hz.
Da du den Ausgang aber gar nicht benötigst, konfiguriere den Timer so:
Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1
Außerdem fehlt bei dir das globale Freigeben der Interrupts
Enable Interrupts
Ok, werde ich gleich machen. Mit dem Lautsprecher hast dur recht, da hab ich jetzt gar nicht dran gedacht-
Und nochmal vielen Dank für die Hilfe.
Das Compare = Toggle kann ich dann bei der Timerkonfiguration weglassen, oder?
Es sollte dan so aussehen:
' Timer 2 für die Uhrzeit einstellen und starten Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1 Compare2 = 124 On Oc2 Isr_von_timer2
Enable Interrupts
Ich werde das ganze gleich mal testen gehen
Viele Grüße
Dominik
Ich habe dir hier mal eine leicht modifizierte Version angehangen. Die läuft sicherer, besonders wenn dein Programm mal größer wird. Schau dir die Unterschiede mal an und überlege, was sie bewirken.
Code:$regfile = "m32def.dat"
$framesize = 40
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
' Variablen für die Uhrzeit
Dim Hilfswert_sekunden As Byte
Dim Sekunden As Byte
Dim Minuten As Byte
Dim Stunden As Byte
Dim Wochentag As Byte
Wochentag = 1
Led Alias Portc.0
Config Led = Output
Dim Z As Single
Dim I As Long
Dim N As Integer
Dim Ton As Integer
Dim Sekunden_flag As Bit
' Timer 2 für die Uhrzeit einstellen und starten
Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1 ', Compare = Toggle
Compare2 = 124
On Compare2 Isr_von_timer2
Enable Compare2
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print "**** RN-CONTROL 1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print "Weitere passende Zusatzboards bei www.robotikhardware.de"
Enable Interrupts 'normalerweise erst kurz vor der Hauptschleife
Do
If Sekunden_flag = 1 Then 'jetzt hast du eine Sekunde Zeit für alles zu verarbeiten
Reset Sekunden_flag
Print ; Wochentag ; " - " ; Stunden ; ":" ; Minuten ; ":" ; Sekunden ; "" 'sonst könnte es hier schon knapp werden
Incr Sekunden
Toggle Led
If Sekunden = 60 Then
Sekunden = 0
Incr Minuten
If Minuten = 60 Then
Minuten = 0
Incr Stunden
If Stunden = 24 Then
Stunden = 0
Incr Wochentag
If Wochentag = 8 Then
Wochentag = 1
End If
End If
End If
End If
End If
Loop
End
' Funktion die mit Timer 2 verbunden ist
' Ist nötieg um aktuelle Uhrzeit auszugeben
Isr_von_timer2:
Incr Hilfswert_sekunden
If Hilfswert_sekunden = 125 Then
Hilfswert_sekunden = 0
Set Sekunden_flag
End If
Return
Hallo Dominik009,
Timer2 ist optimal für einen Uhrenquarz an TOSC1 und TOSC2,
du teilst den Takt durch 128 gibt den OVL Interrupt frei und lässt den Timer einfach loslaufen
und bei jedem Überlauf wird ein Interrupt ausgelöst und 1 Sekunde ist abgelaufen du musst nur eine Variable incrementieren.
Ich muss dazu sagen ich mache sowas immer im Assembler, ich weis nicht wie sich die Laufzeiten in Bascom verlängern.
Mehr info findest du im Datenblatt unter Timer2.
nfg ihle
Vielen Dank für den Code!
Auch vielen Dank für den Tipp mit dem Quarz. Kann ich den weiterhin den normslen 16000000hz Quarz nehmen und den Uhrenabsatz zusätzlich? Werde ich bei meinem nächsten Projekt mal testen, habe jetzt leider keinen passenden Quarz und extra einen einzeln bestellen ist auch blöd ;)
@for_ro,
Das Programm läuft dank deinem code, jedoch zu langsam.
Ich würde sagen, gefühlt läuft sie etwa halb so langsam wie ne richtige Uhr, also +eine Sekunde auf dem Mega sind +2 Sekunden in echt :(
woran kann das liegen?
Wenn ich richtig rechne stimmt im Code evtl. Was nicht.
16000000/1024/2/125 = 62,5
also muss ich entweder in die ISR 62,5 packen, was logischerweise nicht geht.
Also muss 62,5-1=61,5
und das ändert an der Geschwindigkeit der Uhr leider nichts :(
Gruß
Dominik
Hallo Dominik,
bist du sicher, dass dein Controller von einem 16MHz Quarz angetrieben wird und nicht vom internen 8MHz Oscillator?