fekon
Geocacher
In diesem Thread wurde das Thema "Reaktivlicht mit µC" ja ausführlich beleuchtet. Es basiert auf dem hier geschilderten Prinzip.
Da es bei µCs mit PIC und Atmel ähnlich ist wie mit Garmin und Magellan bei GPSr, möchte ich eine Variante für PICs vorstellen.
Dieses Programm ist für den 12F675 geschrieben:
Die Programmiersprache ist Assembler (und der Stil sicher nicht der sauberste). Da das Programm den Watchdogtimer und den internen Oszillator nutzt, sollte man die Konfigurationsbits entsprechend setzen. Der 12F675 ist nicht der stromsparendste PIC, aber ich hatte ihn gerade hier liegen. Wer Informationen zu PICs sucht, der wird hier fündig.
Wer ohne großes Hintergrundwissen ein Reaktivlicht aufbauen will, dem empfehle ich die CMOS-Variante von gomerffm oder das Atmelreaktivlichtkochbuch von Ralf. Getestet habe ich sie allerdings beide nicht.
Da es bei µCs mit PIC und Atmel ähnlich ist wie mit Garmin und Magellan bei GPSr, möchte ich eine Variante für PICs vorstellen.
Dieses Programm ist für den 12F675 geschrieben:
Code:
list P=PIC12F675
include "p12f675.inc"
i equ 0x20
dunkel_z equ 0x21
Init
bcf STATUS,RP0 ; Bank0
movlw 0x07 ; digitale Ein/Ausgänge, kein Komparator
movwf CMCON
bsf STATUS,RP0 ; Bank 1
movlw B'001010' ; kein A/D auf GP0+2
movwf ANSEL
clrf dunkel_z
;Ende Init
st movf dunkel_z,w ;dunkel_z steigt nicht über 245 (willkürlich gewählt)
addlw D'10'
btfss STATUS,C
incf dunkel_z,f ;nicht zu hoch zählen (Überlauf!)
bsf STATUS,RP0 ;0+2 out
movlw B'111010'
movwf TRISIO
movlw B'10001101' ;WDT postscaler 1:32
movwf OPTION_REG
bcf STATUS,RP0
bsf GPIO,0 ;lade LED
bcf GPIO,2
bsf STATUS,RP0 ;0 Eingang
movlw B'111011'
movwf TRISIO
bcf STATUS,RP0
sleep
btfsc GPIO,0 ;hell oder dunkel?
goto st ;dunkel -> nochmal messen
hell
movf dunkel_z,w
addlw D'240' ;256-240=16 > 16 * 32 * 18 ms =~10s
bnc noblink ;erst nach 10s Dunkelheit wieder blinken
blink
movlw 5 ;5 mal blinken
movwf i
bsf STATUS,RP0
movlw B'111010' ;Ausgänge!
movwf TRISIO
BCF STATUS,RP0
bcf GPIO,0
l1 bsf GPIO,2 ;LED an
sleep ;Pause
bcf GPIO,2 ;LED aus
sleep ;Pause
decfsz i,f
goto l1
noblink
clrf dunkel_z ;hell ist nicht dunkel
bsf STATUS,RP0
movlw B'10001111' ;WDT postscaler 1:128
movwf OPTION_REG
sleep ; Pause 2,3s
goto st
END
Wer ohne großes Hintergrundwissen ein Reaktivlicht aufbauen will, dem empfehle ich die CMOS-Variante von gomerffm oder das Atmelreaktivlichtkochbuch von Ralf. Getestet habe ich sie allerdings beide nicht.