• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Fragen zur Software

thomas_st

Geowizard
Ranseiher schrieb:
Code:
Config Int0 = Falling                         'steigende (Rising) oder fallende Flanke (beim drücken oder beim loslassen)
Nur der Vollständigkeit, bevor jemand ins offene Messer läuft. Die IRQs die auf eine Flanke triggern (also Pinchange-IRQ oder INTx mit Falling oder Rising) benötigen einen laufenden Taktgenerator im Tiny:
Datenblatt Tiny13 schrieb:
Note that recognition of falling or rising edge interrupts on
INT0 requires the presence of an I/O clock, described in Clock Systems and their Distribution
on page 21.
Das ist nicht mehr gegeben, wenn der Tiny tiefer als in den "Idle"-Modus schlafen geschickt wird! Also nach einem PowerDown funktionieren obige IRQs nicht mehr (nur noch der Level-IRQ an INT0 funktioniert).

HTH,
Thomas(_st)
 

upigors

Geowizard
schon wieder ne Frage aber dfür gibts ja das Forum....
Ich möchte folgenden Timer rückwärts laufen lassen. Hab verschiedenste Sachen getestet
(BT = BT-1 oder mit negativen Vorzeichen aber will nicht klappen....
Leider bin ich auch in der bascomhilfe nicht fündig geworden....
kann jemand nen Tip geben?
Code:
Dim Initcounter As Byte
Dim Bt As Byte
Dim S As String * 2
      
Cls
     Locate 1 , 1
      Lcd "  TIMER START "
      Locate 2 , 1
      Lcd " in 5 Sekunden"
       Wait 5
Cls
      Locate 1 , 1
      Lcd "Zeit laeuft..  "
      Locate 2 , 1
      Lcd "Timer"
      For Bt = 0 To 10   '(ersetzt durch For Bt = 10 To 0)
         S = Str(bt)
         S = Format(s , "00")
         Locate 2 , 14
         Lcd S
         Wait 1
      Next Bt
      Cls
      Locate 1 , 1
      Lcd "*** Das wars ***"
       Locate 2 , 1
      Lcd " ** GAME OVER **"
        Wait 3
Cls
         Initlcd
End
 

upigors

Geowizard
ich muß gleich mal noch ne Frage hinterher schicken....
ganz oben definiere ich Bt als Byte
somit kann Bt ja maximal 255 sein.
wenn ich jetzt aber nen Timer > 255 brauch, gibts da ne praktikable Lösung?
 

conrad

Geocacher
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
 

rumo&rala

Geocacher
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
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:
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:
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.
 

conrad

Geocacher
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.
 

pirol432

Geocacher
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
 

pirol432

Geocacher
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
 

upigors

Geowizard
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:
$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
Code:
wait
oder
Code:
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:
wait10000
oder sowas wählen musste.
Also, ich präzisiere meine frage: Wenn ich den
Code:
$crystal = 1000000
wähle, stimmen dann die Sekunde/Millisekunden? Kanns leider nicht testen derzeit.
Gruß und Dank im Vorraus
Uwe
 

peter51d

Geocacher
Nagel mich jetzt nicht darauf fest, aber so weit ich es verstanden habe, sollte
Code:
$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:
$ crystal=
und tatsächliche Frequenz des µC nicht überein, passen natürlich auch die Wartezeiten nicht. Das betrifft nicht nur die
Code:
Wait
Befehle sondern meiner Meinung nach alle zeitabhängigen Befehle wie z.B.
Code:
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.
 

Kappler

Geowizard
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.
 
Oben