Fragen zur Software

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Re: Fragen zur Software

Beitrag von conrad » Mo 12. Sep 2011, 06:28

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

Werbung:
rumo&rala
Geocacher
Beiträge: 179
Registriert: Di 12. Jun 2007, 22:21
Wohnort: 38100 Braunschweig

Re: Fragen zur Software

Beitrag von rumo&rala » Mo 12. Sep 2011, 18:25

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.

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Re: Fragen zur Software

Beitrag von conrad » Di 13. Sep 2011, 14:13

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:

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
nun:

Code: Alles auswählen

Blinken:                                                    'LED blinken lassen
   TOGGLE b.3 
    Reset Watchdog
    Powerdown
    Alt = 1023                                                'Doppelauslösung verhindern
Return
Kanns leider nicht testen im Moment aber so prinzipiell.....?
Grüße
c.

Benutzeravatar
Windi
Geoguru
Beiträge: 6338
Registriert: Fr 16. Jan 2004, 23:57
Kontaktdaten:

Re: Fragen zur Software

Beitrag von Windi » Fr 16. Sep 2011, 16:30

Fast richtig.
Nur müsste es toggle portb.3 heissen.
Bild

conrad
Geocacher
Beiträge: 74
Registriert: So 16. Dez 2007, 09:03
Wohnort: BS

Re: Fragen zur Software

Beitrag von conrad » Fr 16. Sep 2011, 16:51

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.

Benutzeravatar
pirol432
Geocacher
Beiträge: 21
Registriert: Sa 18. Sep 2010, 15:18
Wohnort: 09243 Niederfrohna

Re: Fragen zur Software

Beitrag von pirol432 » Sa 28. Jan 2012, 17:38

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

Benutzeravatar
pirol432
Geocacher
Beiträge: 21
Registriert: Sa 18. Sep 2010, 15:18
Wohnort: 09243 Niederfrohna

Re: Fragen zur Software

Beitrag von pirol432 » So 29. Jan 2012, 19:22

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

Benutzeravatar
upigors
Geowizard
Beiträge: 2342
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors » Fr 23. Mär 2012, 12:05

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

Code: Alles auswählen

$crystal = 
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

Code: Alles auswählen

waitms
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

Code: Alles auswählen

wait10000
oder sowas wählen musste.
Also, ich präzisiere meine frage: Wenn ich den

Code: Alles auswählen

$crystal = 1000000
wähle, stimmen dann die Sekunde/Millisekunden? Kanns leider nicht testen derzeit.
Gruß und Dank im Vorraus
Uwe
Bild..Bild

Benutzeravatar
peter51d
Geomaster
Beiträge: 394
Registriert: Do 8. Okt 2009, 12:09
Wohnort: 49661 Kellerhöhe

Re: Fragen zur Software

Beitrag von peter51d » Fr 23. Mär 2012, 17:18

Nagel mich jetzt nicht darauf fest, aber so weit ich es verstanden habe, sollte

Code: Alles auswählen

$crystal=
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

Code: Alles auswählen

$ crystal=
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.

Code: Alles auswählen

debunce
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.
Grüße aus dem Norden

peter51d

Benutzeravatar
Kappler
Geowizard
Beiträge: 1437
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: Fragen zur Software

Beitrag von Kappler » Fr 23. Mär 2012, 18:34

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.
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder