
War ich wohl Kreide holen....
Nee im ernst, dieses ganze Thema - ich hab mir das nur anhand der ersten hier geposteten Programme angenommen und eben an diesen 2 Werten mußte ich bisher nie rumspielen und daher stellte sich die Frage eben nicht.
Moderator: radioscout
Code: Alles auswählen
If Zeichen = "S" Then Gosub Schleife 'zur Schleife springen
If Zeichen = "X" Then Return
Loop
Schleife: '60 sek Schleife
Wdtcsr = &B11010101 'Watchdog auf 0,5s stellen
Do 'do schleife
If Merker > Schwelle Then Gosub Morsen2 'Bei großer Änderung Dunkel->Hell:morsen2
Reset Watchdog
Powerdown
Sekundenzaehler = Sekundenzaehler + 1 'zählt alle halbe sekunde
If Sekundenzaehler < 120 Then Return 'nach 60sekunden is schluss
Loop
Wdtcsr = &B11010011 'Watchdog wieder auf 125ms stellen
Return
Morsen2:
Restore Daten2 'Am Beginn der Daten anfangen
Alt = 1023 'Doppelauslösung verhindern
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Do
Reset Watchdog
Powerdown
Read Zeichen
Wdtcsr = &B11010101 'Watchdog auf 0,5s stellen
If Zeichen = "0" Then Gosub P0 'schreibt 0 ins Display
If Zeichen = "1" Then Gosub P1 'schreibt 1 ins Display
If Zeichen = "2" Then Gosub P2 'schreibt 2 ins Display
If Zeichen = "3" Then Gosub P3 'schreibt 3 ins Display
Code: Alles auswählen
$hwstack = 20 'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny24.DAT"
$crystal = 128000 'Frequenz des internen Oszillators
Config Adc = Single , Prescaler = Auto
Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang', Rest auf 'Eingang' schalten
Config Porta = &B10001011 'Pina.0+1+3+7 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0 'Ausgänge auf Low setzen
Porta = 0
Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen
Wdtcsr = &B11010011 'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts 'Interrupts freigeben
Const Schwelle = 100 'je größer der Schwellwert, desto unempfindlicher
Const Tagschwelle = 800 'Schwellwert für Schlafmodus
Const Zwangsimpuls = 8 'LED-Impuls tagsüber alle X Schlafyklen (á ca. 8 Sekunden)
Dim A As Byte 'Variablen definieren
Dim Tagzaehler As Byte
Dim Schlafzaehler As Byte
Dim Sekundenzaehler As Byte 'sekundenzähler
Dim Ldr As Integer '0 = Dunkel, 1023 = Hell
Dim Alt As Integer
Dim Merker As Integer
Dim Zeichen As String * 1
Do
Reset Watchdog
Powerdown 'prozessor bremsen da sonst lichtänderung nicht erkannt wird
Start Adc 'A/D-Wandler starten
Waitms 1
Ldr = Getadc(2) 'Helligkeitswert einlesen
Waitms 1
Stop Adc 'A/D-Wandler zum Stromsparen wieder stoppen
Merker = Ldr - Alt 'Unterschied zwischen letzter und aktueller Messung ermitteln
Alt = Ldr 'letzten LDR-Wert sichern
If Merker > Schwelle Then Gosub Morsen 'Bei großer Änderung Dunkel->Hell: Blinken
If Ldr > Tagschwelle Then 'prüfen ob helligkeit über tagschwelle liegt
If Tagzaehler < 255 Then 'int-variable geht nur bis 255
Tagzaehler = Tagzaehler + 1
End If
Else
Tagzaehler = 0 'wenn wieder dunkel tagzähler löschen
End If
If Tagzaehler > 200 Then Gosub Pause 'wenn mehr als x zyklen hell dann schlafmodus
Loop
Pause:
Wdtcsr = &B11110001 'Watchdog auf 8 Sekunden stellen
Reset Watchdog
Powerdown
Wdtcsr = &B11010011 'Watchdog wieder auf 0,125 Sekunden zurückstellen
Schlafzaehler = Schlafzaehler + 1 'merken wie oft Schlafmodus durchlaufen wurde
If Schlafzaehler = Zwangsimpuls Then 'als Funktionskontrolle tagsüber LED auslösen
'Porta.5 = 1
Reset Watchdog
Powerdown
'Porta.5 = 0
Schlafzaehler = 0
End If
Return
Morsen:
Restore Daten 'Am Beginn der Daten anfangen
Alt = 1023 'Doppelauslösung verhindern
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Do
Reset Watchdog
Powerdown
Read Zeichen
Wdtcsr = &B11010101 'Watchdog auf 0,5s stellen
If Zeichen = "0" Then Gosub P0 'schreibt 0 ins Display
If Zeichen = "1" Then Gosub P1 'schreibt 1 ins Display
If Zeichen = "2" Then Gosub P2 'schreibt 2 ins Display
If Zeichen = "3" Then Gosub P3 'schreibt 3 ins Display
If Zeichen = "4" Then Gosub P4 'schreibt 4 ins Display
If Zeichen = "5" Then Gosub P5 'schreibt 5 ins Display
If Zeichen = "6" Then Gosub P6 'schreibt 6 ins Display
If Zeichen = "7" Then Gosub P7 'schreibt 7 ins Display
If Zeichen = "8" Then Gosub P8 'schreibt 8 ins Display
If Zeichen = "9" Then Gosub P9 'schreibt 9 ins Display
If Zeichen = " " Then Gosub Leer 'Pause = Leerzeichen
If Zeichen = "Start" Then Gosub Pstart 'startet das Intro
If Zeichen = "C" Then Gosub C 'schreibt C ins Display
Wdtcsr = &B11010011 'Watchdog wieder auf 125ms stellen
If Zeichen = "S" Then Gosub Schleife 'spring in die Schleife
If Zeichen = "X" Then Return
Loop
Schleife: '60 sek Schleife
Wdtcsr = &B11010101 'Watchdog auf 0,5s stellen
Do 'do schleife
Start Adc 'A/D-Wandler starten
Waitms 1
Ldr = Getadc(2) 'Helligkeitswert einlesen
Waitms 1
Stop Adc 'A/D-Wandler zum Stromsparen wieder stoppen
Merker = Ldr - Alt 'Unterschied zwischen letzter und aktueller Messung ermitteln
Alt = Ldr 'letzten LDR-Wert sichern
If Merker > Schwelle Then Gosub Morsen2 'Bei großer Änderung Dunkel->Hell:morsen2
Reset Watchdog
Powerdown
Sekundenzaehler = Sekundenzaehler + 1 'zählt alle halbe sekunde
If Sekundenzaehler < 120 Then Return 'nach 60sekunden ist schluss
Loop
Wdtcsr = &B11010011 'Watchdog wieder auf 125ms stellen
Return
Morsen2:
Restore Daten2 'Am Beginn der Daten anfangen
Alt = 1023 'Doppelauslösung verhindern
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Do
Reset Watchdog
Powerdown
Read Zeichen
Wdtcsr = &B11010101 'Watchdog auf 0,5s stellen
If Zeichen = "0" Then Gosub P0 'schreibt 0 ins Display
If Zeichen = "1" Then Gosub P1 'schreibt 1 ins Display
If Zeichen = "2" Then Gosub P2 'schreibt 2 ins Display
If Zeichen = "3" Then Gosub P3 'schreibt 3 ins Display
If Zeichen = "4" Then Gosub P4 'schreibt 4 ins Display
If Zeichen = "5" Then Gosub P5 'schreibt 5 ins Display
If Zeichen = "6" Then Gosub P6 'schreibt 6 ins Display
If Zeichen = "7" Then Gosub P7 'schreibt 7 ins Display
If Zeichen = "8" Then Gosub P8 'schreibt 8 ins Display
If Zeichen = "9" Then Gosub P9 'schreibt 9 ins Display
If Zeichen = " " Then Gosub Leer 'Pause = Leerzeichen
If Zeichen = "Start" Then Gosub Pstart 'startet das Intro
If Zeichen = "C" Then Gosub C 'schreibt C ins Display
If Zeichen = "W" Then Gosub Lang 'lange Pause
Wdtcsr = &B11010011 'Watchdog wieder auf 125ms stellen
If Zeichen = "X" Then Return
Loop
P0:
Porta = &B10001011
Portb = &B00000110
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P1:
Porta = &B00001010
Portb = &B00000000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P2:
Porta = &B10000011
Portb = &B00000101
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P3:
Porta = &B10001011
Portb = &B00000001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P4:
Porta = &B00001010
Portb = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P5:
Porta = &B10001001
Portb = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P6:
Porta = &B10001001
Portb = &B00000111
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P7:
Porta = &B00001011
Portb = &B00000000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P8:
Porta = &B10001011
Portb = &B00000111
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
P9:
Porta = &B10001011
Portb = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
Leer:
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Return
Lang:
Wdtcsr = &B11110001 'Watchdog auf 8 Sekunden stellen
Reset Watchdog '1
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog '2
Powerdown
Wdtcsr = &B11010011
Return
Pstart:
Wdtcsr = &B11010011 'Watchdog auf 125ms
Porta = &B00000001 'schlange umlauf 1x
Portb = &B00000000
Reset Watchdog
Powerdown
Porta = &B00000010
Portb = &B00000000
Reset Watchdog
Powerdown
Porta = &B00000000
Portb = &B00000001
Reset Watchdog
Powerdown
Porta = &B00000000
Portb = &B00000100
Reset Watchdog
Powerdown
Porta = &B10000000
Portb = &B00000000
Reset Watchdog
Powerdown
Porta = &B00001000
Portb = &B00000000
Reset Watchdog
Powerdown
Porta = &B00000000
Portb = &B00000001
Reset Watchdog
Powerdown
Porta = &B00000000
Portb = &B00000010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
C:
Porta = &B10000001
Portb = &B00000110
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return
End
Daten:
Data "Start"
Data "5" , "2" , " " , "1" , "1" , " " , "1" , "2" , "3" , " "
Data "1" , "0" , " " , "1" , "2" , " " , "1" , "2" , "3" , "Start"
Data "S" , "X"
Daten2:
Data "Start"
Data "C" , "1" , "Start" , "W"
Data "C" , "1" , "Start" ,
Data "X"
Code: Alles auswählen
$regfile = "attiny13.dat"
$crystal = 376000
$hwstack = 24
$swstack = 10
$framesize = 24
Config Portb = &00000001 'Pinb.0 auf "Ausgang", Rest auf "Eingang"
Portb = 0 'Ausgänge auf Low setzen
Eingang Alias Pinb.1
Ausgang Alias Pinb.0
Waitms 200
Do
Ausgang = 1
If Pinb.1 = 1 Then Gosub Ledan
Waitms 500
If Pinb.1 = 1 Then Gosub Ledan
Waitms 500
Ausgang = 0
If Pinb.1 = 1 Then Gosub Ledan
Waitms 500
If Pinb.1 = 1 Then Gosub Ledan
Waitms 500
Loop
End
Ledan:
Powerdown
Waitms 20
Ausgang = 0
Waitms 500
Ausgang = 1
Wait 20
Ausgang = 0
Waitms 500
Return
erstens:ksbender hat geschrieben: Folgender Sachverhalt: Ich möchte einen Reedkontakt mit einem Tiny 13 (nur so zum Versuch) verheiraten. Dann will ich abfragen, ob der Reedkontakt geschlossen wurde und es soll eine "Aktion" ausgeführt werden.
Code: Alles auswählen
$crystal = 376000
Die PullUps sind aber mitstonewood hat geschrieben:zweitens:
Die Portpins haben einen internen Pullup der um die 10 KOhm hat. Genauer: 20-50 KOhm laut Datenblatt.
deaktiviert worden. Also zumindest an dieser Stelle ist bei Nutzung der PullUps noch eine Anpassung notwendig (entsprechende Bits auf High). Ob Bascom die PullUps dann noch eventuell global deaktiviert, wäre zu klären.ksbender hat geschrieben:Code: Alles auswählen
[...] Portb = 0 'Ausgänge auf Low setzen [...]