Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Fragen zur Software
Moderator: radioscout
Re: Fragen zur Software
Guten Morgen und einen schönen Wochenstart an alle.
Nach einiger Abstinenz am Lötkolben und hier im Forum hab ich ne neue Idee auf Basis des Reaktivlicht.
Ich möchte erreichen das nach der ersten Aktivierung ein Pin auf High schaltet und erst nach der nächsten Aktivierung wieder auf Low.
Sprich einmal aktivien - ON, 2. mal aktivieren - OFF
Dabei kann der Schlafmodus ect wegfallen wenn nötig.
Kann mir jemand mal ein wenig auf die Sprünge helfen aber irgendwie fehlt mir hier ein Ansatz. Aktivierung ist klar, Laufzeiten wären auch kein Thema, will ich ja aber in diesem Fall nicht....
Wie auch immer, ich komm damit erstmal nicht zurecht, fehlen wohl die Erfahrungen.
Wäre ein feiner Zug wenn mir jemand mal einen Denkanstoß geben könnte. Danke im Voraus
Nach einiger Abstinenz am Lötkolben und hier im Forum hab ich ne neue Idee auf Basis des Reaktivlicht.
Ich möchte erreichen das nach der ersten Aktivierung ein Pin auf High schaltet und erst nach der nächsten Aktivierung wieder auf Low.
Sprich einmal aktivien - ON, 2. mal aktivieren - OFF
Dabei kann der Schlafmodus ect wegfallen wenn nötig.
Kann mir jemand mal ein wenig auf die Sprünge helfen aber irgendwie fehlt mir hier ein Ansatz. Aktivierung ist klar, Laufzeiten wären auch kein Thema, will ich ja aber in diesem Fall nicht....
Wie auch immer, ich komm damit erstmal nicht zurecht, fehlen wohl die Erfahrungen.
Wäre ein feiner Zug wenn mir jemand mal einen Denkanstoß geben könnte. Danke im Voraus
Werbung:
Re: Fragen zur Software
Ich bin zwar kein Experte, aber das müsste doch ganz einfach mit "toggle" machbar sein.
Wie man das ganze dann beendet, über nen Zähler oder so, ist dann ne andere Sache.
Wie man das ganze dann beendet, über nen Zähler oder so, ist dann ne andere Sache.
Re: Fragen zur Software
versteh ich den Toggle-Befehl richtig, der invertiert nach Aufruf den Pin einfach, egal welchen Zustand der vorher hat?
Im Beispiel des Ur-Reaktivlichts sollte also das "Blinken" so aussehen:
statt:
nun:
Kanns leider nicht testen im Moment aber so prinzipiell.....?
Grüße
c.
Im Beispiel des Ur-Reaktivlichts sollte also das "Blinken" so aussehen:
statt:
Code: Alles auswählen
Blinken: 'LED blinken lassen
For A = 1 To 10 'Wie oft Blinken? (hier 10x)
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Next A
Alt = 1023 'Doppelauslösung verhindern
Return
Code: Alles auswählen
Blinken: 'LED blinken lassen
TOGGLE b.3
Reset Watchdog
Powerdown
Alt = 1023 'Doppelauslösung verhindern
Return
Grüße
c.
Re: Fragen zur Software
Jepp, nachdem hier auf die Schnelle keiner geantwortet hat hab ich es hin bekommen. Funktioniert PERFEKT. Schöner Befehl
Trotzdem vielen Dank für Deine Antwort.

Trotzdem vielen Dank für Deine Antwort.
Re: Fragen zur Software
Hallo Bascom Experten,
Ich beschäftige mich erst kurz mit Bascom und AVR und habe folgendes Problem.
Ich möcht einen Text auf einem 5x7 Dotmatrix anzeigen und habe das folgende Programm.
Die Matrix zeigt allerdings nur Unfug an und ich weiß nicht was ich noch machen kann.
Vielleicht kann mir jemand dabei helfen.
Zur Matrix, 5x7LED´s die Kathoden(Spalten) liegen über 5 Transistoren an PortC0-C4 und die Anoden über Wiederstände an PortB1-B7.
Danke im Voraus.
------------------------------------------------------------------------------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000
Config Portc = Output
Anode Alias Portc
Anode = 0
Config Portb = Output
Kathode Alias Portb
Portd = &HFF
Dim Zeilennummer As Byte
Dim Zeile(7) As Byte
Dim Zeichen As String * 1
Dim Wort As String * 30
Dim Buchstabe As String * 1
Dim Vorigerbuchstabe As String * 1
Dim Laenge As Byte
Dim Position As Byte
Dim I As Byte
Const Wartezeit = 100
Const Kurzewartezeit = 20
Buchstabe = " "
Rem Wort = "HALLO"
Wort = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Laenge = Len(wort)
Do
For Position = 1 To Laenge
Vorigerbuchstabe = Buchstabe
Buchstabe = Mid(wort , Position , 1)
If Buchstabe = Vorigerbuchstabe Then Gosub Kurzepause
Gosub Zeilenmusterfuerbuchstaben
For I = I To Wartezeit
Gosub Anzeigen
Next I
Next Position
Loop
End
Zeilenmusterfuerbuchstaben:
Restore Dotmatrix_daten
Do
Read Zeichen
For Zeilennummer = 1 To 7
Read Zeile(zeilennummer)
Next
Loop Until Zeichen = Buchstabe
Return
Anzeigen:
For Zeilennummer = 1 To 7
Anode = 0
Kathode = &HFF
Anode = Zeile(zeilennummer)
Kathode.zeilennummer = 0
Waitms 1
Next I
Return
Kurzepause:
For Zeilennummer = 1 To 7
Zeile(zeilennummer) = 0
Next Zeilennummer
For I = 1 To Kurzewartezeit
Gosub Anzeigen
Next I
Return
Dotmatrix_daten:
Data "A" , 14 , 17 , 17 , 17 , 31 , 17 , 17
Data "B" , 30 , 17 , 17 , 30 , 17 , 17 , 30
Data "C" , 14 , 17 , 16 , 16 , 16 , 17 , 14
Data "D" , 28 , 18 , 17 , 17 , 17 , 18 , 28
Data "E" , 31 , 16 , 16 , 30 , 16 , 16 , 31
Data "F" , 31 , 16 , 16 , 30 , 16 , 16 , 16
Data "G" , 14 , 17 , 16 , 23 , 17 , 17 , 15
Data "H" , 17 , 17 , 17 , 31 , 17 , 17 , 17
Data "I" , 14 , 4 , 4 , 4 , 4 , 4 , 14
Data "J" , 7 , 2 , 2 , 2 , 2 , 2 , 12
Data "K" , 17 , 18 , 20 , 24 , 20 , 18 , 17
Data "L" , 16 , 16 , 16 , 1 , 616 , 16 , 31
Data "M" , 17 , 27 , 21 , 21 , 17 , 17 , 17
Data "N" , 17 , 17 , 25 , 21 , 19 , 17 , 17
Data "O" , 14 , 17 , 17 , 17 , 17 , 17 , 14
Data "P" , 30 , 17 , 17 , 30 , 16 , 16 , 16
Data "Q" , 14 , 17 , 17 , 17 , 21 , 18 , 13
Data "R" , 30 , 17 , 17 , 30 , 20 , 18 , 17
Data "S" , 15 , 16 , 16 , 14 , 1 , 1 , 30
Data "T" , 31 , 4 , 4 , 4 , 4 , 4 , 4
Data "U" , 17 , 17 , 17 , 17 , 17 , 14
Data "V" , 17 , 17 , 17 , 17 , 17 , 10 , 4
Data "W" , 17 , 17 , 17 , 17 , 21 , 21 , 10
Data "X" , 17 , 17 , 10 , 4 , 10 , 17 , 17
Data "Y" , 17 , 17 , 17 , 10 , 4 , 4 , 4
Data "Z" , 31 , 1 , 2 , 4 , 8 , 16 , 31
Data "_" , 32 , 32 , 32 , 31 , 32 , 32 , 32
Data " " , 32 , 32 , 32 , 32 , 23 , 23 , 23
Data "#" , 31 , 10 , 31 , 31 , 31 , 14 , 4
Ich beschäftige mich erst kurz mit Bascom und AVR und habe folgendes Problem.
Ich möcht einen Text auf einem 5x7 Dotmatrix anzeigen und habe das folgende Programm.
Die Matrix zeigt allerdings nur Unfug an und ich weiß nicht was ich noch machen kann.
Vielleicht kann mir jemand dabei helfen.
Zur Matrix, 5x7LED´s die Kathoden(Spalten) liegen über 5 Transistoren an PortC0-C4 und die Anoden über Wiederstände an PortB1-B7.
Danke im Voraus.
------------------------------------------------------------------------------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000
Config Portc = Output
Anode Alias Portc
Anode = 0
Config Portb = Output
Kathode Alias Portb
Portd = &HFF
Dim Zeilennummer As Byte
Dim Zeile(7) As Byte
Dim Zeichen As String * 1
Dim Wort As String * 30
Dim Buchstabe As String * 1
Dim Vorigerbuchstabe As String * 1
Dim Laenge As Byte
Dim Position As Byte
Dim I As Byte
Const Wartezeit = 100
Const Kurzewartezeit = 20
Buchstabe = " "
Rem Wort = "HALLO"
Wort = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Laenge = Len(wort)
Do
For Position = 1 To Laenge
Vorigerbuchstabe = Buchstabe
Buchstabe = Mid(wort , Position , 1)
If Buchstabe = Vorigerbuchstabe Then Gosub Kurzepause
Gosub Zeilenmusterfuerbuchstaben
For I = I To Wartezeit
Gosub Anzeigen
Next I
Next Position
Loop
End
Zeilenmusterfuerbuchstaben:
Restore Dotmatrix_daten
Do
Read Zeichen
For Zeilennummer = 1 To 7
Read Zeile(zeilennummer)
Next
Loop Until Zeichen = Buchstabe
Return
Anzeigen:
For Zeilennummer = 1 To 7
Anode = 0
Kathode = &HFF
Anode = Zeile(zeilennummer)
Kathode.zeilennummer = 0
Waitms 1
Next I
Return
Kurzepause:
For Zeilennummer = 1 To 7
Zeile(zeilennummer) = 0
Next Zeilennummer
For I = 1 To Kurzewartezeit
Gosub Anzeigen
Next I
Return
Dotmatrix_daten:
Data "A" , 14 , 17 , 17 , 17 , 31 , 17 , 17
Data "B" , 30 , 17 , 17 , 30 , 17 , 17 , 30
Data "C" , 14 , 17 , 16 , 16 , 16 , 17 , 14
Data "D" , 28 , 18 , 17 , 17 , 17 , 18 , 28
Data "E" , 31 , 16 , 16 , 30 , 16 , 16 , 31
Data "F" , 31 , 16 , 16 , 30 , 16 , 16 , 16
Data "G" , 14 , 17 , 16 , 23 , 17 , 17 , 15
Data "H" , 17 , 17 , 17 , 31 , 17 , 17 , 17
Data "I" , 14 , 4 , 4 , 4 , 4 , 4 , 14
Data "J" , 7 , 2 , 2 , 2 , 2 , 2 , 12
Data "K" , 17 , 18 , 20 , 24 , 20 , 18 , 17
Data "L" , 16 , 16 , 16 , 1 , 616 , 16 , 31
Data "M" , 17 , 27 , 21 , 21 , 17 , 17 , 17
Data "N" , 17 , 17 , 25 , 21 , 19 , 17 , 17
Data "O" , 14 , 17 , 17 , 17 , 17 , 17 , 14
Data "P" , 30 , 17 , 17 , 30 , 16 , 16 , 16
Data "Q" , 14 , 17 , 17 , 17 , 21 , 18 , 13
Data "R" , 30 , 17 , 17 , 30 , 20 , 18 , 17
Data "S" , 15 , 16 , 16 , 14 , 1 , 1 , 30
Data "T" , 31 , 4 , 4 , 4 , 4 , 4 , 4
Data "U" , 17 , 17 , 17 , 17 , 17 , 14
Data "V" , 17 , 17 , 17 , 17 , 17 , 10 , 4
Data "W" , 17 , 17 , 17 , 17 , 21 , 21 , 10
Data "X" , 17 , 17 , 10 , 4 , 10 , 17 , 17
Data "Y" , 17 , 17 , 17 , 10 , 4 , 4 , 4
Data "Z" , 31 , 1 , 2 , 4 , 8 , 16 , 31
Data "_" , 32 , 32 , 32 , 31 , 32 , 32 , 32
Data " " , 32 , 32 , 32 , 32 , 23 , 23 , 23
Data "#" , 31 , 10 , 31 , 31 , 31 , 14 , 4
Re: Fragen zur Software
Hallo,
Gut, gut hat sich erledigt.
Ich habe noch mal eine Nacht darüber geschlafen und heute Morgen bin ich dann selbst drauf gekommen.
Es lag nicht am Programm, es lag an der Hardware.
Viele Grüße
Mirko
Gut, gut hat sich erledigt.
Ich habe noch mal eine Nacht darüber geschlafen und heute Morgen bin ich dann selbst drauf gekommen.
Es lag nicht am Programm, es lag an der Hardware.
Viele Grüße
Mirko
- upigors
- Geowizard
- Beiträge: 2350
- Registriert: Mo 24. Sep 2007, 15:52
- Wohnort: 39326 Hohenwarsleben
- Kontaktdaten:
Re: Fragen zur Software
So, nachdem mir momentan etwas die Experimentierfreudigkeit ausgegangen ist hab ich angefangen mal ein paar offene Theoretischen Baustellen zu schliessen.
Soll heißen es gibt immer noch ein paar Dinge in den Codes die ich bisher nicht beleuchtet und immer 1:1 übernommen hab. Eine davon ist warum wurde die Taktrate des Controllers beim reaktiven so weit runter genommen? Nur zum Stromsparen? Default beim AT24 ist 1.000.000 richtig? Und auch nur wenn ich die 1.000.000 hab stimmen auch die Zeiten wenn ich mit oder arbeite, richtig? Oder bring ich da was durcheinander? hab eben mal versucht die Zusammenhänge zu erlesen aber so richtig fündig bin ich nicht geworden. Ist mir nur mal aufgefallen das ich um 3min warten zu lassen oder sowas wählen musste.
Also, ich präzisiere meine frage: Wenn ich den wähle, stimmen dann die Sekunde/Millisekunden? Kanns leider nicht testen derzeit.
Gruß und Dank im Vorraus
Uwe
Soll heißen es gibt immer noch ein paar Dinge in den Codes die ich bisher nicht beleuchtet und immer 1:1 übernommen hab. Eine davon ist
Code: Alles auswählen
$crystal =
Code: Alles auswählen
wait
Code: Alles auswählen
waitms
Code: Alles auswählen
wait10000
Also, ich präzisiere meine frage: Wenn ich den
Code: Alles auswählen
$crystal = 1000000
Gruß und Dank im Vorraus
Uwe
Re: Fragen zur Software
Nagel mich jetzt nicht darauf fest, aber so weit ich es verstanden habe, sollte
mit der Frequenz des µC übereinstimmen.
Dem µC ist es egal welche Frequenz im Code steht, er arbeitet immer mit der Frequenz, die in den Fuses stehen.
Bascom rechnet jetzt anhand der Frequenz Angabe im Code die Anzahl der Takte aus, die der µC warten muss. Stimmen und tatsächliche Frequenz des µC nicht überein, passen natürlich auch die Wartezeiten nicht. Das betrifft nicht nur die Befehle sondern meiner Meinung nach alle zeitabhängigen Befehle wie z.B. ect. (wir erinnern uns an den Code für das Wählscheibentelefon
)
Wie das mit timern aussieht, weiß ich jetzt nicht.
Läuft der µC schnelle als im Code angegeben, ist die Anzahl der von Bascom vorgegebenen Takte natürlich viel schneller abgearbeitet. Die Pause ist zu kurz.
Läuft der µC langsamer als im Code angegeben, wird die Pause halt zu lang.
Beim verlangsamen der µC bei den RL's, geht es, soweit ich es verstanden habe, tatsächlich nur ums Stromsparen. Der Unterschied beim Stromverbrauch zwischen 128kHz und 1Mhz ist abhängig von der Versorgungsspannung ja schon gravierend. 128kHz bei 5V VSS ~.0,1mA und bei 1MHz und 5V VSS ~ 0,9mA.
Wie weit die Watchdog Funktion noch noch etwas mit der Frequenz zu tun hat, weiß ich nicht, so tief bin ich noch nicht drin. Das wird wird auch noch lange dauern.
Code: Alles auswählen
$crystal=
Dem µC ist es egal welche Frequenz im Code steht, er arbeitet immer mit der Frequenz, die in den Fuses stehen.
Bascom rechnet jetzt anhand der Frequenz Angabe im Code die Anzahl der Takte aus, die der µC warten muss. Stimmen
Code: Alles auswählen
$ crystal=
Code: Alles auswählen
Wait
Code: Alles auswählen
debunce

Wie das mit timern aussieht, weiß ich jetzt nicht.
Läuft der µC schnelle als im Code angegeben, ist die Anzahl der von Bascom vorgegebenen Takte natürlich viel schneller abgearbeitet. Die Pause ist zu kurz.
Läuft der µC langsamer als im Code angegeben, wird die Pause halt zu lang.
Beim verlangsamen der µC bei den RL's, geht es, soweit ich es verstanden habe, tatsächlich nur ums Stromsparen. Der Unterschied beim Stromverbrauch zwischen 128kHz und 1Mhz ist abhängig von der Versorgungsspannung ja schon gravierend. 128kHz bei 5V VSS ~.0,1mA und bei 1MHz und 5V VSS ~ 0,9mA.
Wie weit die Watchdog Funktion noch noch etwas mit der Frequenz zu tun hat, weiß ich nicht, so tief bin ich noch nicht drin. Das wird wird auch noch lange dauern.
Grüße aus dem Norden
peter51d
peter51d
Re: Fragen zur Software
Die Watchdog-Funktion hat nichts mit der Taktfrequenz zu tun, da der Watchdog einen eigenen Timer hat.
Im Sleep-Modus wird der "normale" Taktgeber ausgeschaltet, nur der Watchdog-Timer läuft weiter (sofern der Watchdog eingeschaltet ist).
Übrigens stimmt das mit dem Stromverbrauch bei geringer Taktfrequenz nur bedingt:
Es gab hier im Forum mal einen Thread - hier hat jemand den tatsächlichen Stromverbrauch beim Betrieb des Reaktivlichts mit AD-Wandler bei verschiedenen Taktfrequenzen gemessen.
Ergebnis: Der Gesamt-Stromverbrauch war bei 1MHz am geringsten, was der Standard-Fuse-Einstellung entspricht.
Die Vermutung war, dass dies deshalb so ist, weil eine AD-Wandlung bei höherer Taktfrequenz viel schneller beendet ist.
Voraussetzung hierfür war allerdings, dass konsequent alle Wartebefehle über den Watchdog-Timer abgewickelt werden...
Aus diesem Grund spare ich mir auch das riskante "Rumfusen" an den Prozessoren, das doch immer wieder für Ärger sorgt.
Und mein erstes Reaktivlicht mit 2 AAAA-Zellen (aus einer 9V-Blockbatterie) läuft nach 3 Jahren an unserem Parkplatz, wo es bei jedem einfahrenden Auto ausgelöst wird, immer noch... Trotz Kontrollblitz alle Minute.
Im Sleep-Modus wird der "normale" Taktgeber ausgeschaltet, nur der Watchdog-Timer läuft weiter (sofern der Watchdog eingeschaltet ist).
Übrigens stimmt das mit dem Stromverbrauch bei geringer Taktfrequenz nur bedingt:
Es gab hier im Forum mal einen Thread - hier hat jemand den tatsächlichen Stromverbrauch beim Betrieb des Reaktivlichts mit AD-Wandler bei verschiedenen Taktfrequenzen gemessen.
Ergebnis: Der Gesamt-Stromverbrauch war bei 1MHz am geringsten, was der Standard-Fuse-Einstellung entspricht.
Die Vermutung war, dass dies deshalb so ist, weil eine AD-Wandlung bei höherer Taktfrequenz viel schneller beendet ist.
Voraussetzung hierfür war allerdings, dass konsequent alle Wartebefehle über den Watchdog-Timer abgewickelt werden...
Aus diesem Grund spare ich mir auch das riskante "Rumfusen" an den Prozessoren, das doch immer wieder für Ärger sorgt.
Und mein erstes Reaktivlicht mit 2 AAAA-Zellen (aus einer 9V-Blockbatterie) läuft nach 3 Jahren an unserem Parkplatz, wo es bei jedem einfahrenden Auto ausgelöst wird, immer noch... Trotz Kontrollblitz alle Minute.
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Bekennender Fremdlogleser und Rosinenpicker