Intervalltorkare

Berätta om dina pågående projekt.
persika
EF Sponsor
Inlägg: 1354
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Intervalltorkare

Inlägg av persika »

Här är ett projekt som legat och samlat damm länge.
Kan visa det här ändå.
DSC04742.JPG
Det var i slutet på 80-talet, fick jag en idé om att bygga en
intervalltorkare till bilen. På den tiden hade inte alla bilar
intervall-läge. Det fanns byggsatser att köpa, de hade då
en pot för att ställa in tiden. Idén jag fick var att mäta
tiden mellan två torkningar som man gör manuellt med en
knapp som påverkar torkaren, den uppmätta tiden hålls
sedan när intervalltorkningen är igång. På så vis ställer
man enkelt in rätt tid för den regnmängd som kommer just då.

Här på bilden syns 80-talsvarianten byggd med TTL-kretsar.
Den centrala delen är en 8-bits upp/ner räknare som mäter
och håller intervalltid, med en "klock-frekvens" på 2 Hz.

2006 gjorde jag en ny PIC-variant. (det lilla kretskortet på bilden)
Den funkar på ungefär samma sätt, som följer här.

En tryckning:
Torkarna går en gång och tidmätning startar (startar om).

Två tryckningar i snabb följd:
Torkarna går en gång, intervalltorkning startar med uppmätt tid och
tidmätning startar om.

Långt tryck:
Intervalltorkning avslutas men tidmätning fortsätter.

Här är kretschema och ASM-kod för PIC, om någon är sugen på att bygga.
inttork2.GIF

Kod: Markera allt

;**********************************************************************

	errorlevel -203, -204, -205, -206, -207, -302             


list      p=12f629
#include <p12f629.inc>

__CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
; 4 MHz 


; Funktionsbskrivning
;
; Tre olika lägen:
; * Frånläge, Spänning är tillkopplad, ingen lysdiod är tänd, torkaren går ej.
; * Tidmätning, Tidmätlysdiod är tänd och tiden mellan två torkningar mäts upp.
; * Driftläge, Intervalltorkning kör med inställd tid.
;
; Enkeltryck, En torkning direkt, och tidmätning startas eller startas om, 
;             tidmätlysdiod tänds, den släck först när tidmätning nått tiden "255*tidsteg"
;            
; Dubbeltryck, Intervalltorkning (driftläge) startar med tiden som gått sen senaste enkeltryck, 
;              Tiden lagras i eepromet.
;              Om dubbeltryck ges direkt, utan föregående enkeltryck så körs intervalltorkning 
;              med tid lagrad från förra gången driftläge var till
;
; Långtryck, Avslutar intervalltorkning (driftläge), dock fortsätter tidmätning. 
;            Långtryck kan användas för att förlänga intervalltiden, intervalltorkningen 
;            återupptages i så fall med Dubbeltryck.
;

cblock 020h
	rg6					; rg_, allmänna register
	rg7
	rg8
	rg9
	rg10
	rg11
	
	TidMätReg			; Innehåller tid från senaste torkning
	
	IntervallTidReg		; Innehåller intervalltid, tid mellan torkningar
	
	IntervallRäknReg	; Samma som IntervallTidReg, fast detta är arbetsregistret, räknas ner till 0 och 
						; laddas sedan om med IntervallTidReg.
endc


#define	TorkarePin		GPIO, 0h
#define	TidMätLysdiod	GPIO, 01h
#define	DriftLysdiod	GPIO, 02h
#define	KnappPin		GPIO, 03h		; knapp intryckt ger nolla



TorkImpulsTid		equ d'10'	; antal 1/10 dels sek
; Håller torkarmotorn igång så länge så att den kommer över det 
; läge där den kör ett helt svep och stannar sen i utgångsläget


TidsSteg			equ d'3'	; antal 1/10 dels sek
; Tidsteg i drift och uppmätning av intervalltid


IntervallTidRegEE		equ	01h	; minnesadress i EEPROM, för att lagra intervalltid


;---------------------------------------------------------------------------

		org 0x00

		goto init


;-------------------------------------------------------------
LagraEEPROM
;
; indata:
;			EEADR (OBS! bank 1), w=EEdata
; utdata:
;		-
;
; register som ändras:
;						w, EECON1, EECON2
;
; PC-stackanvändning: 0

		banksel EEDATA
		movwf	EEDATA		

		bsf		EECON1, WREN
		movlw	055h
		movwf	EECON2
		movlw	0AAh
		movwf	EECON2
		bsf		EECON1, WR

		bcf		EECON1, WREN
		banksel 0

		return


;-------------------------------------------------------------
LäsEEPROM
;
; indata:
;			w=EEadress
; utdata:
;			w=EEdata
;
; register som ändras:
;						EECON1
;
; PC-stackanvändning: 0


		banksel EEADR
		movwf	EEADR
		bsf		EECON1, RD
		movf	EEDATA, w		
		banksel 0

		return


;-------------------------------------------------------------

Tid1		
; Tidsfördröjning 1 sekund
;
; indata:
;	w, antal sekunders fördröjning
;
; utdata:
;		-
;
; register som ändras:
;	w, rg8, rg9, rg10, rg11
;
; PC-stackanvändning: 0


			movwf rg11
ts1s_1		 movlw 045h
			 movwf rg10
ts1s_2		  movlw	045h
			  movwf rg9
ts1s_3		   movlw 045h
			   movwf rg8
ts1s_4
			    decfsz rg8, f
 			    goto ts1s_4
			   decfsz rg9, f
			   goto ts1s_3
			  decfsz rg10, f
			  goto ts1s_2
			 decfsz rg11, f
			 goto ts1s_1
			return

;-------------------------------------------------------------

Tid01		
; Tidsfördröjning 0.1 sekund
;
; indata:
;	w, antal tiondelsekunders fördröjning
;
; utdata:
;		-
;
; register som ändras:
;	w, rg9, rg10, rg11
;
; PC-stackanvändning: 0


			movwf rg11
ts1_1		 movlw 0B4h
			 movwf rg10
ts1_2		  movlw	0B8h
			  movwf rg9
ts1_3
			   decfsz rg9, f
			   goto ts1_3
			  decfsz rg10, f
			  goto ts1_2
			 decfsz rg11, f
			 goto ts1_1
			return

;-------------------------------------------------------------

Tid001		
; Tidsfördröjning 0.01 sekund
;
; indata:
;	w, antal hundradelsekunders fördröjning
;
; utdata:
;		-
;
; register som ändras:
;	w, rg9, rg10, rg11
;
; PC-stackanvändning: 0


			movwf rg11
ts2_1		 movlw 039h
			 movwf rg10
ts2_2		  movlw	039h
			  movwf rg9
ts2_3
			   decfsz rg9, f
			   goto ts2_3
			  decfsz rg10, f
			  goto ts2_2
			 decfsz rg11, f
			 goto ts2_1
			return

;-------------------------------------------------------------
Tid1ms		
; Tidsfördröjning 1 ms
;
; indata:
;	w, antal ms fördröjning
;
; utdata:
;		-
;
; register som ändras:
;	w, rg9, rg10, rg11
;
; PC-stackanvändning: 0


			movwf rg11
ts_1		 movlw 012h
			 movwf rg10
ts_2		  movlw	012h
			  movwf rg9
ts_3
			   decfsz rg9, f
			   goto ts_3
			  decfsz rg10, f
			  goto ts_2
			 decfsz rg11, f
			 goto ts_1
			return

;-------------------------------------------------------------

Tid01kn		
; Tidsfördröjning 0.1 sekund, avbryter då knapp tryckts in
;
; indata:
;	w, antal tiondelsekunders fördröjning
;
; utdata:
;		-
;
; register som ändras:
;	w, rg9, rg10, rg11
;
; PC-stackanvändning: 0


			movwf rg11
ts1k_1		 movlw 08Dh
			 movwf rg10
ts1k_2		  movlw	08Dh
			  movwf rg9
ts1k_3
				btfss	KnappPin	; om KnappPin=0 då avbryt
				return
			   decfsz rg9, f
			   goto ts1k_3
			  decfsz rg10, f
			  goto ts1k_2
			 decfsz rg11, f
			 goto ts1k_1
			return

;-------------------------------------------------------------

LäsAvKnapp		
; Läser av en knapp om Enkel-, Dubbel- eller Lång-tryck.
; OBS, efter denna rutin kan knapp fortfarande vara intryckt.
;
; indata:
;		-
;
; utdata:
;		knapp ej tryckt: w=00
;		EnkelTryck:		w=01
;		DubbelTryck:	w=02
;		LångTryck:		w=FF
;
; register som ändras:
;		rg7, rg9, rg10, rg11
;
; PC-stackanvändning: 1

	; Testa knapp
	; om knapp ej tryckt, returnera 00
	; vänta studstid

	; tidräknare := 0
	; så länge knapp är tryckt gör
	 ; öka tidräknare
	 ; vänta 0.1 s
	 ; om tidräknare >= 1s då returnera LångTryck

	; tidräknare := 0
	; så länge knapp inte är tryckt gör
	 ; öka tidräknare
	 ; vänta 0.1 s
	 ; om tidräknare >= 0.5s då returnera EnkelTryck
	
	; returnera DubbelTryck



EnkelTryck	equ 01h
DubbelTryck	equ 02h
LångTryck	equ 0FFh



	; Testa knapp
	; Om knapp ej tryckt, returnera 00
		btfsc	KnappPin	; om KnappPin=1 då  returnera 00
		retlw	0h

	; Vänta studstid
		movlw	d'5'	
		call Tid001

	; Tidräknare := 0
		clrf	rg7

	; Så länge knapp är tryckt gör
Lak_slt
		btfsc	KnappPin	; om KnappPin=0 då räkna upp 
		goto Lak_sls

	 ; Öka tidräknare
		incf rg7, f

	 ; Vänta 0.1 s
		movlw	01h
		call Tid01

	 ; Om tidräknare >= 1s då returnera LångTryck
		movlw	0ah
		subwf	rg7, w
		btfsc	status, c
		retlw LångTryck
		
		goto Lak_slt

	; Tidräknare := 0
		clrf	rg7
Lak_sls
	; Så länge knapp inte är tryckt gör
		btfss	KnappPin	; om KnappPin=1 då räkna upp 
		retlw	DubbelTryck

	 ; Öka tidräknare
		incf rg7, f

	 ; Vänta 0.1 s
		movlw	01h
		call Tid01

	 ; Om tidräknare >= 0.5s då returnera EnkelTryck
		movlw	05h
		subwf	rg7, w
		btfsc	status, c
		retlw EnkelTryck
		
		goto Lak_sls
	
	; Returnera DubbelTryck


;-------------------------------------------------------------
VäntaKnappSläppt
;
; indata:
;		-
;
; utdata:
;		-
;
; register som ändras:
;	w, rg9, rg10, rg11
;
; PC-stackanvändning: 1

vks_sl
		btfss	KnappPin	; Om KnappPin=0 då fortsätt i slinga 
		goto vks_sl

	; Vänta studstid
		movlw	d'5'	
		call Tid001

		btfss	KnappPin	; Om KnappPin=0 då fortsätt i slinga 
		goto vks_sl

return

;-------------------------------------------------------------

TorkImpuls
; Håller torkarmotorn igång så länge så att den kommer över det 
; läge där den kör ett helt svep och stannar sen i utgångsläget
;
; indata:
;		TorkImpulsTid, IntervallTidReg, DriftLysdiod
;
; utdata:
;		TorkarePin
;
; register som ändras:
;			w, rg9, rg10, rg11
;
; PC-stackanvändning: 1

		; Starta torkare och vänta TorkImpulsTid
		bsf		TorkarePin
		movlw	TorkImpulsTid
		call Tid01

; Om driftläge och intervalltid kortare än 3 sek låt då torkaren gå hela tiden.		
		; om intervalltid mindre än 3 sek då: slå ej från torkare
		movlw	d'10'		; 10 * 0.3s (tidssteg) = 3s
		subwf	IntervallTidReg, w
		btfsc	status, c
		bcf		TorkarePin
		; Om Driftlysdiod är släckt då: slå från torkare   
		btfss	DriftLysdiod
		bcf		TorkarePin
		
		return
;-------------------------------------------------------------



;*********************Initiering av portar******************************
	init	



			clrf	GPIO	
			banksel TRISIO
			movlw	b'00001000'
			movwf 	TRISIO		; Ställer in vilka ben som ska vara in o utgångar
			banksel	0			

			clrf	GPIO		; Init GPIO

			movlw	07h			; 00000111  Comparator Off (Lowest power)
			movwf	CMCON		;


			call    0x3FF		; retrieve factory calibration value
			banksel OSCCAL		; set file register bank to 1 
			movwf   OSCCAL		; update register with factory cal value 
			banksel	0			; set file register bank to 0
	


;*******************************************************************


		clrf	TidMätReg


slinga




; -------------- läs av knapp -----------------

		call LäsAvKnapp
		movwf	rg7		; rg7 := knapp data

		; rg7 = 0  ?, Knapp tryckt ?
		movlw	0h
		subwf	rg7, w
		btfsc	status, z
		goto alltid_i_slinga	; Ej tryckt	 ->  ja, rg7=0

		; rg7 = EnkelTryck  ?
		movlw	EnkelTryck
		subwf	rg7, w
		btfsc	status, z
		goto ET_tryckt		; ->  Ja,  rg7 = EnkelTryck

		; rg7 = DubbelTryck ?
		movlw	DubbelTryck
		subwf	rg7, w
		btfsc	status, z
		goto DT_tryckt		; ->  Ja,  rg7 = DubbelTryck

		; rg7 = LångTryck  ?
		movlw	LångTryck
		subwf	rg7, w
		btfsc	status, z
		goto LT_tryckt		; ->  Ja,  rg7 = LångTryck

; -------------- läs av knapp -----------------



; ---------- agera enligt knapptryckning ----------

ET_tryckt
		; kör torkare ett svep
		call TorkImpuls
		; tidmätning startar
		bsf		TidMätLysdiod
		clrf	TidMätReg

		; Om Enkeltryck ges i Driftläge då ska IntervallRäknReg laddas om,
		; (det gör inget att detta sker utanför driftläge också) 
		movf	IntervallTidReg, w
		movwf	IntervallRäknReg
		
		goto alltid_i_slinga


DT_tryckt
; Driftläge sätts igång.
; Antingen med lagrad intervalltid sedan förra
; gången driftläge var igång eller med nyligens uppmätt tid 
; sedan senaste Enkeltryck
		bsf		DriftLysdiod
		
; Dubbeltryck med eller utan föregående Enkeltryck ?
; d.v.s om Tidmätning pågår eller ej ?
		btfsc	TidMätLysdiod
		goto DT_medET

	; DubbelTryck utan föregående EnkelTryck
	; Intervalltorkning startas direkt, med tid som lagrats förra gången 

		; läs Intervall tid lagrad i EEPROM
		movlw	IntervallTidRegEE
		call LäsEEPROM
		movwf	IntervallTidReg
		movwf	IntervallRäknReg

		; kör torkare 
		call TorkImpuls
		; starta ny tidmätning
		bsf		TidMätLysdiod
		clrf	TidMätReg
		
		goto alltid_i_slinga



DT_medET
	; DubbelTryck med föregående EnkelTryck
		
		; Lagra uppmätt tid TidMätReg i EEPROM
		movlw	IntervallTidRegEE
		banksel EEADR
		movwf	EEADR
		banksel 0
		movf	TidMätReg, w
		movwf	IntervallTidReg
		movwf	IntervallRäknReg
		call LagraEEPROM
		
		; kör torkare 
		call TorkImpuls
		; starta om tidmätning, TidMätLysdiod är redan tänd
		clrf	TidMätReg
		
		goto alltid_i_slinga



LT_tryckt
		; Driftläge och torkare slås ifrån, torkaren slås ifrån också eftersom 
		; den kan vara konstant till, om intervalltid är kortare än 3sek.
		; Tidmätning slås ej ifrån eftersom Långtryck kan användas för att förlänga intervalltiden.
		bcf		DriftLysdiod
		bcf		TorkarePin

; ---------- agera enligt knapptryckning ----------




alltid_i_slinga
; ------------- alltid_i_slinga ------------------

		call VäntaKnappSläppt
		movlw	TidsSteg	; vänta "TidsSteg" i drift och uppmätning av intervalltid. 
		call Tid01kn


; om TidMätLysdiod är tänd, räkna då upp TidMätReg, till 0FFh som max
		btfss	TidMätLysdiod
		goto ais_2

		; räkna upp TimMätReg
		incfsz	TidMätReg, f
		goto ais_2
		; om TimMätReg slår om från 0FFh till 00h då: slå från tidmätning
		bcf		TidMätLysdiod
ais_2


; om i driftläge då: räkna ner IntervallRäknReg och kör torkare om noll
		btfss	DriftLysdiod
		goto ais_3

		; räkna ner IntervallRäknReg
		decfsz	IntervallRäknReg, f
		goto ais_3		;  hoppa om räknare inte är noll
		
		; IntervallRäknReg har räknats ner till 0, ladda om det med värdet i IntervallTidReg, och kör torkare
		movf	IntervallTidReg, w
		movwf	IntervallRäknReg
		; kör torkare 
		call TorkImpuls
		clrf	TidMätReg
ais_3

; ------------- alltid_i_slinga ------------------


		goto slinga



END                       
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
kimachren
Inlägg: 104
Blev medlem: 15 september 2010, 21:27:18
Ort: Vasa

Re: Intervalltorkare

Inlägg av kimachren »

Exakt så där fungerar det på min gamla BMW e34!
Kortet blev en aning mindre med uC, ser jag.
Användarvisningsbild
Sparkz
Inlägg: 429
Blev medlem: 26 november 2003, 19:17:33
Ort: Vesene

Re: Intervalltorkare

Inlägg av Sparkz »

Finns intervallrelän med den funktionen, japp.
http://www.backspegeln.com/tips_intervall.asp
Tråkigt när man uppfinner nåt och upptäcker att det redan finns... Men det fanns nog inte på 80-talet, så VAG har nog snott din ide!
persika
EF Sponsor
Inlägg: 1354
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: Intervalltorkare

Inlägg av persika »

Det är nästan alltid så att när man kommer på nåt som man tror är nytt och "revolutionerande" så finns det redan.
Jag tyckte det var roligt att genomföra idén och jag sålde 2-3 byggsatser till kompisar, då på 80-talet.
Iaf så är det roligt att se fler kom på samma sak, det visar ju att idén var bra.
Användarvisningsbild
GiK
Inlägg: 507
Blev medlem: 26 augusti 2008, 08:55:20
Ort: Kalmar

Re: Intervalltorkare

Inlägg av GiK »

:bravo:
Idén jag fick var att mäta
tiden mellan två torkningar som man gör manuellt.........
Idén är hur smart som helst!

Synd att Du inte jobba för SAAB som var ett tekniker-styrt företag,
och pigga på nya tekniska "påhitt".

Fortsätt bara, du hittar nog på något annat vars det lider.
Eller har Du fler i "byrådan"? :tumupp:
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Intervalltorkare

Inlägg av blueint »

Då får vi väl hoppas att saab överlever då ;)
Användarvisningsbild
GiK
Inlägg: 507
Blev medlem: 26 augusti 2008, 08:55:20
Ort: Kalmar

Re: Intervalltorkare

Inlägg av GiK »

:glasogon:


Ja en sak är jag 100 på. GM var bara utefter SAAB:s teknik.
Den fick under inga omständigheter komma i kinesernas händer.

GM har så många bilar och ta hand om, att få en till var aldrig
aktuellt. Ta tekniken, lägg ner SAAB, var deras avsikt från början.


Tråkigt tråkigt! :(
persika
EF Sponsor
Inlägg: 1354
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: Intervalltorkare

Inlägg av persika »

Gik> Idén är hur smart som helst!
Roligt att Du tycker det!

Gik> Synd att Du inte jobba för SAAB som var ett tekniker-styrt företag,
och pigga på nya tekniska "påhitt".

Då i slutet på 80-talet hade jag tyckt det varit roligt attt få jobba på Saab.
Men nu är ju läget ett annat för Saab. Dessutom är det lite långt härifrån.

Gik> Fortsätt bara, du hittar nog på något annat vars det lider.
Eller har Du fler i "byrådan"?

Ja, rätt som det är kan det ploppa upp en idé, men inte nån "stor" idé på gång just nu.
Det bästa är aktivera sig, så ser man behov och nya lösningar kan komma fram.
Användarvisningsbild
AntiZ
Inlägg: 318
Blev medlem: 22 februari 2007, 13:34:14
Ort: V. Husby
Kontakt:

Re: Intervalltorkare

Inlägg av AntiZ »

Sparkz:
Hade sådant på Golf III. Helt underbart bra.

Regnsensorn på Saaben (9-3 -07) är ju en katastrof i oprecision (som alla regnsensorer jag kommit i kontakt med för övrigt).
Spelar ingen roll att ställa in känsligheten heller. :(

Kanske kan testa med det svindyra reläet. Eller bränner man upp bilen?
Användarvisningsbild
GiK
Inlägg: 507
Blev medlem: 26 augusti 2008, 08:55:20
Ort: Kalmar

Re: Intervalltorkare

Inlägg av GiK »

Allt var nog inte "i hamn" funktionellt.

Men medge att detta med regnsensor är lite
småklurigt tänkt. :jimmyhacker:

Med lite mer utvecklings tid så........ :vissla:
kimachren
Inlägg: 104
Blev medlem: 15 september 2010, 21:27:18
Ort: Vasa

Re: Intervalltorkare

Inlägg av kimachren »

Bilen jag nämnde har också hastighetsberoende intervall, så att uppmätt tid justeras enligt farten. Där har du följande steg i utvecklingen.
persika
EF Sponsor
Inlägg: 1354
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: Intervalltorkare

Inlägg av persika »

Hastighetsberoende intervall... Ja, det är ju en variant, men personligen tror jag mer på idén med regnsensor, om man kan få det att funka.

Hur fungerar regnsensorn i Saab ? (vilken princip?)
Användarvisningsbild
GiK
Inlägg: 507
Blev medlem: 26 augusti 2008, 08:55:20
Ort: Kalmar

Re: Intervalltorkare

Inlägg av GiK »

:D

Jag vet inte själv ur den funka (och jag som bara ägt
SAAB:ar utom den sista. SAAB gör tyvärr inga "småbilar".)


Men vill Du absolut "spåna vidare", så är det bara
att ta fram papper och penna och förutsättningslöst
kolla vilka "resultats variabler" som kan vara aktuella.
Ohm är en given kandidat, hur många varianter han
jag få fram av den resultatvariabeln.

Hur SAAB gjorde faller under rubriken "Konkurrent analys".
Då samlar man in så mycket dokumentation man kan
om befintliga system.
Patentverkets arkiv är en guldgruva.

Sedan upp med allt på bordet, diskutera, analysera och
lägg upp en plan för den egna "utvecklings strategin".

Men vist oss DIY:are emellan, man kan bara bygga på
och göra "omtag" och förbättringar till man har något
man är till freds med. :drool:
Användarvisningsbild
Icecap
Inlägg: 26221
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Intervalltorkare

Inlägg av Icecap »

Jag hade allvarliga funderingar på att bygga om intervallreläet i min bil. Om man "bara" slog på ville den starta med normal tid och helt enkelt vara som ett vanligt relä men slog man bara ett slag och sedan, efter en viss tid slog på intervallpositionen igen ville den köra det intervall som var.

Alltså var det bara att torka en gång och sedan slå den i intervalläget när det behövdes torkas nästa gången och sedan var saken biff. Enkelt att göra om fler gångar och torkar man bara en gång ska det finnas en viss maximal tid där den sluter räkna och bara räknar torkslaget som just ett enda slag.

Det blev aldrig av men jag ville inte ha lösa knappar någonstans, allt skulle vara plug-and-play!
Borre
Inlägg: 4574
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Intervalltorkare

Inlägg av Borre »

Så fungerar det i Volvos lastbilar.
Skriv svar