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.