Projekt: PIC kontrollerad Bensinmätare till moppe

Berätta om dina pågående projekt.
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Projekt: PIC kontrollerad Bensinmätare till moppe

Inlägg av Jine »

Hej!

Har nu dragit igång ett projekt som ska vara på detta viset:

På min moped består bensinmätaren av en flöttör som åker upp/ner beroende på hur mycket bensin det finns i tanken, beroende på var flottören är så ändras motståndet..
Tanken (tänkt) är att jag ska konstruera en liten mätare som känner av hur mycket motståndet och pic kretsen jämför och kontrollerar om det värdet som den får in är mer/mindre än *** isf ska den tex. blinka med en LED..

Jag har suttit och tänk litet tag och lättas vad jag har kommit fram till är en enkel liten PIC krets med inbyggt A/D omvandlare..

Dock så är jag lite osäker på hur sånt fugera.. någon kanske har några bra sidor/guider/projekt som man kan lära sig lite mer om tex. A/D omvandlare medmera..?

Tacksam för hjälp..

Mvh Jine
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Tror att en PIC12f675 räcker bra. Billiga och söta (8-pinnar) är de också. Du behöver inte veta så mycket om A/D-omvandlig. Gör bara som det står i databladet så fungerar det. En annan sak om man skall försöka göra snabba avläsningar, men en 12f675 klarar av lång snabbare a/d omvandling än vad du behöver.
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Inlägg av Jine »

Okej.. 12f kretsarna har jag faktist aldrig testat.. så det blir nåt nytt.. SKa först kolla om min isp-pro klarar av dom.. :)

Snabba avläsninger? Näää du.. det behövs inte.. bensinen tar inte slut på 2sekunder :P ;)

Men kanske nån avläsning per minut skulle räcka.. :)

Har du nåt annat tips som jag ska tänka på..??

EDIT: PIC12f675 fugerar alldess utmärk med min isp-pro..

Mvh Jim

EDIT2: Förresten.. Kanske vore en idee att använda fler än en lysdiod till indikeringen.. som en stapel som går neråt beroende på hru mycket bensin det finns.. Då kanske jag kommer behöva fler I/O pinnar än vad PIC12f675 har.. Nån annan likvärdig krets, fast större?
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Yepp, jag har använt ISP-PRO och 12f629 och 12f675 or utan problem. Jag hade lite strul, men det har en dålig kabel till adapterkortet som ställde till det, men ISP-PRO och 12F går utmärkt. Registrerna är lite anorlunda gentemot 16f serien, men inga stora saker - läs bara databladet så är det problemfritt. Tips är att köra med resonator i början då det är lite strul innan man får ordning på intosc och OSCAL - för mig var det det iaf och det är då skönt att veta att det inte det som strular om det strular.
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Inlägg av Jine »

Okej.. :) Skönt och höra att det fugerar..

Nu ska man bara rota fram alla gammla komponenter som ligger nere i källaren.. Jag la nämligen ner det mesta av elektroniken förut pga jag tappade intresset..

Hmm.. Går det fortfarande o sampla från Microchip? Står massa larv om företag o saker nu :(

mvh Jim
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Tja, går gör det - men jag gjorde det till jobbet iofs. Den kostar typ 20 spänn ifrån ELFA, så ingen kioskvältare direkt att köpa heller..
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Inlägg av Jine »

Okej.. Då samplar jag den och hoppas :P
Dock så undrar jag en sak..

Allmänt om den PIC kretsen, Hur kommer det sig att den har 8pinnar och 6st av dom är I/O pinnar.. hur tusan kopplar man in kristall eller liknande då?? På 2st I/O pinnar???

Ist kan det blir lite hårt.. då återstår 4st I/O.. en INput används väl till A/D antar jag? och då är det 3st kvar.. 3st mätnings-leds kanske blir lite lite :S

Mvh Jim
ClasseMan
Inlägg: 176
Blev medlem: 9 juli 2004, 15:21:02
Ort: Karlskrona
Kontakt:

Inlägg av ClasseMan »

Nu kostar ju inte en pic12f675 många kronor, men det känns som det vore enklare att lösa det med en komperator (kostar runt 5kr) och ett par resistorer om det bara är en LED du vill tända.
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Inlägg av Jine »

Det var ju just det.. Jag skulle gärna vilja tända flera leds beroende på motståndet..

Mvh Jim
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Skippar man kristall och kör INTOSC så har du 6 pinnar att leka med om du också väljer bort master clear - reset behövs inte :) Kör du intern osc så får du dock max 4MHz, men det räcker oftast.. har du 5 pinnar till leds så kan du få ganska många leds att lysa om du kopplar dem lite smart.

Pinnarna kan ju både driva och säkna ström, så med listig kopping kan du få ganska många fler än 5 dioder att lysa på 5 portpinnar. LED´s är ju dioder också ;)
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Inlägg av Jine »

Hmm.. Okej Bengt-re..

Dock så är jag fortfarande osäker hur allt med A/D fugerar.. och hur koden för PICen ska se ut för att den ska känna av motståndet...

Help please?

Mvh Jine
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Ja, det är bara att sätta rätt register och vänta till en flagga signalerar att omvandligen är klar så har du ditt analoga värde in på ett register. Kod har jag väl inte inte exakt som gör de du vill, men använde 12F629 att interfaca en AD590 som temperaturmätare och skickade temperaturen seriellt till en Palm, dock så var det seriekommunikationen som var jobbig där då denna uP inte har någon USART, men det går ändå. Har nog den koden kvar i datorn på jobbet tror jag. Fördelen med att använda uP istället för diskreta lösningar är att det blir färre komponenter, man kan ha blinkande dioder och man kan kalibrera en olinjär nivå enkelt, men fullt möjligt att lösa problemet med en typ LM 3914 - 10 dioder och lite småplock så är det klart. Jag byggde en gång i tiden en varvräknare till en bil med tre seriekopplade sånna - funkar bra det också även om det är dyrare och lite "lowtec"
Användarvisningsbild
lgrfbs
Inlägg: 7008
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Inlägg av lgrfbs »

Kanse detta kan ge en idé att modda om lite?

Länk för att montera flera LED:s på få I/O
Gå vidare på länken "microCoder-projekt" på sidan.

Vill du se ASM filen som mikroPascal fixar i mitt bro-projekt?
Jag använder A/D i där med 12F675.
Senast redigerad av lgrfbs 8 november 2005, 23:09:37, redigerad totalt 1 gång.
Användarvisningsbild
Jine
Inlägg: 1794
Blev medlem: 21 juli 2004, 20:25:56
Skype: Jim.Nelin
Ort: Trångsund, Stockholm
Kontakt:

Inlägg av Jine »

Bengt-re: Okej.. Hmm..

Lgrfbs: Visst..

http://www.ctrldesign.com/microcoder/pr ... /meter.php
Hmm.. Jo.. Det där visste jag redan.. dock så förstår jag inte hur man skulle få dit fler än 6st dioder?
Användarvisningsbild
lgrfbs
Inlägg: 7008
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Inlägg av lgrfbs »

knepet är att man kopplar 2St LED:s på samma sätt som en 2 bens grön/röd LED.
sedan kör man två portar endligt:

Kod: Markera allt

1, 
GP1 ----+->|-+---- GP2
        +-|<-+
GP1=I
GP2=O

1, 
GP1 ----+->|-+---- GP2
        +-|<-+
GP1=O
GP2=I

Vilket ger 2*6=12 möjliga dioder
ASM koden från mikroPascal + pascalkoden som referens:

Kod: Markera allt

;  
;  ASM code generated by mikroVirtualMachine for PIC - V. 2.0.1.0
;  Date/Time: 2005-11-08 22:14:02
;  Info: http://www.mikroelektronika.co.yu
;  
; Address        Instruction
;-------------------------------------
0000	GOTO	main
  ;--- procedure delays_delay_22us ---
	delays_delay_22us:
0004	MOVLW	7
0005	BCF	STATUS,RP1
0006	BCF	STATUS,RP0
0007	MOVWF	STACK_0
0008	DECFSZ	STACK_0,F
0009	GOTO	$-1
000A	RETURN
	;---endproc---
  ;--- function ADClib_A_E_adc_read ---
	ADClib_A_E_adc_read:
000B	MOVLW	240
000C	BCF	STATUS,RP1
000D	BCF	STATUS,RP0
000E	ANDWF	ADCON0,W
000F	MOVWF	ADCON0
0010	MOVLW	240
0011	BSF	STATUS,RP0
0012	IORWF	ANSEL,W
0013	MOVWF	ANSEL
0014	BCF	STATUS,RP0
0015	BSF	adcon0,7
0016	MOVF	ADClib_A_E_adc_read_param_channel,W
0017	MOVWF	STACK_1
0018	MOVLW	2
0019	MOVWF	STACK_2
001A	L_ADClib_A_E_0:
001A	MOVF	STACK_2,W
001B	BTFSC	STATUS,Z
001C	GOTO	L_ADClib_A_E_1
001D	RLF	STACK_1,F
001E	BCF	STACK_1,0
001F	DECFSZ	STACK_2,F
0020	GOTO	L_ADClib_A_E_0
0021	L_ADClib_A_E_1:
0021	MOVF	STACK_1,W
0022	IORWF	ADCON0,W
0023	MOVWF	ADCON0
0024	BSF	adcon0,0
0025	CALL	delays_delay_22us
0026	BSF	adcon0,1
0027	L_ADClib_A_E_3:
0027	CLRF	STACK_0
0028	BTFSC	adcon0,1
0029	INCF	STACK_0,F
002A	MOVLW	1
002B	SUBWF	STACK_0,W
002C	BTFSS	STATUS,Z
002D	GOTO	L_ADClib_A_E_4
002E	L_ADClib_A_E_2:
002E	nop
002F	GOTO	L_ADClib_A_E_3
0030	L_ADClib_A_E_4:
0030	MOVF	ADRESH,W
0031	MOVWF	ADClib_A_E_adc_read_result_1
0032	MOVLW	8
0033	MOVWF	STACK_0
0034	MOVLW	0
0035	MOVWF	ADClib_A_E_adc_read_result_2
0036	L_ADClib_A_E_5:
0036	MOVF	STACK_0,W
0037	BTFSC	STATUS,Z
0038	GOTO	L_ADClib_A_E_6
0039	RLF	ADClib_A_E_adc_read_result_1,F
003A	RLF	ADClib_A_E_adc_read_result_2,F
003B	BCF	ADClib_A_E_adc_read_result_1,0
003C	DECFSZ	STACK_0,F
003D	GOTO	L_ADClib_A_E_5
003E	L_ADClib_A_E_6:
003E	CLRF	STACK_0
003F	BSF	STATUS,RP0
0040	MOVF	ADRESL,W
0041	IORWF	ADClib_A_E_adc_read_result_1,W
0042	MOVWF	ADClib_A_E_adc_read_result_1
0043	MOVF	STACK_0,W
0044	IORWF	ADClib_A_E_adc_read_result_2,W
0045	MOVWF	ADClib_A_E_adc_read_result_2
0046	BCF	STATUS,RP0
0047	BCF	adcon0,0
0048	RETURN
	;---endproc---
  ;--- procedure main ---
	main:
0049	BCF	STATUS,RP1
004A	BCF	STATUS,RP0
004B	CLRF	GPIO
004C	MOVLW	7
004D	MOVWF	CMCON
004E	BSF	STATUS,RP0
004F	CLRF	TRISIO
0050	BSF	trisio,0
0051	BSF	trisio,1
0052	BCF	STATUS,RP0
0053	BCF	adcon0,6
0054	MOVLW	4
0055	MOVWF	GPIO
0056	MOVLW	6
0057	MOVWF	STACK_0
0058	MOVLW	255
0059	MOVWF	STACK_1
005A	MOVLW	255
005B	MOVWF	STACK_2
005C	DECFSZ	STACK_0,F
005D	GOTO	$+2
005E	GOTO	$+8
005F	DECFSZ	STACK_1,F
0060	GOTO	$+2
0061	GOTO	$+4
0062	DECFSZ	STACK_2,F
0063	GOTO	$-1
0064	GOTO	$-5
0065	GOTO	$-9
0066	MOVLW	26
0067	MOVWF	STACK_0
0068	MOVLW	255
0069	MOVWF	STACK_1
006A	DECFSZ	STACK_0,F
006B	GOTO	$+2
006C	GOTO	$+4
006D	DECFSZ	STACK_1,F
006E	GOTO	$-1
006F	GOTO	$-5
0070	MOVLW	66
0071	MOVWF	STACK_0
0072	DECFSZ	STACK_0,F
0073	GOTO	$-1
0074	MOVLW	1
0075	MOVWF	main_global_poweron
0076	L_Thomas_Bro2_0:
0076	MOVLW	5
0077	MOVWF	STACK_0
0078	MOVF	main_global_poweron,W
0079	SUBWF	STACK_0,W
007A	BTFSS	STATUS,C
007B	GOTO	L_Thomas_Bro2_1
007C	MOVLW	4
007D	MOVWF	GPIO
007E	MOVLW	3
007F	MOVWF	STACK_1
0080	MOVLW	255
0081	MOVWF	STACK_2
0082	MOVLW	255
0083	MOVWF	STACK_3
0084	DECFSZ	STACK_1,F
0085	GOTO	$+2
0086	GOTO	$+8
0087	DECFSZ	STACK_2,F
0088	GOTO	$+2
0089	GOTO	$+4
008A	DECFSZ	STACK_3,F
008B	GOTO	$-1
008C	GOTO	$-5
008D	GOTO	$-9
008E	MOVLW	11
008F	MOVWF	STACK_1
0090	MOVLW	255
0091	MOVWF	STACK_2
0092	DECFSZ	STACK_1,F
0093	GOTO	$+2
0094	GOTO	$+4
0095	DECFSZ	STACK_2,F
0096	GOTO	$-1
0097	GOTO	$-5
0098	MOVLW	24
0099	MOVWF	STACK_1
009A	DECFSZ	STACK_1,F
009B	GOTO	$-1
009C	CLRF	GPIO
009D	MOVLW	3
009E	MOVWF	STACK_1
009F	MOVLW	255
00A0	MOVWF	STACK_2
00A1	MOVLW	255
00A2	MOVWF	STACK_3
00A3	DECFSZ	STACK_1,F
00A4	GOTO	$+2
00A5	GOTO	$+8
00A6	DECFSZ	STACK_2,F
00A7	GOTO	$+2
00A8	GOTO	$+4
00A9	DECFSZ	STACK_3,F
00AA	GOTO	$-1
00AB	GOTO	$-5
00AC	GOTO	$-9
00AD	MOVLW	11
00AE	MOVWF	STACK_1
00AF	MOVLW	255
00B0	MOVWF	STACK_2
00B1	DECFSZ	STACK_1,F
00B2	GOTO	$+2
00B3	GOTO	$+4
00B4	DECFSZ	STACK_2,F
00B5	GOTO	$-1
00B6	GOTO	$-5
00B7	MOVLW	24
00B8	MOVWF	STACK_1
00B9	DECFSZ	STACK_1,F
00BA	GOTO	$-1
00BB	L_Thomas_Bro2_2:
00BB	CLRF	STACK_1
00BC	INCF	STACK_1,F
00BD	MOVF	main_global_poweron,W
00BE	ADDWF	STACK_1,W
00BF	MOVWF	main_global_poweron
00C0	GOTO	L_Thomas_Bro2_0
00C1	L_Thomas_Bro2_1:
00C1	CLRF	GPIO
00C2	MOVLW	11
00C3	MOVWF	STACK_0
00C4	MOVLW	255
00C5	MOVWF	STACK_1
00C6	MOVLW	255
00C7	MOVWF	STACK_2
00C8	DECFSZ	STACK_0,F
00C9	GOTO	$+2
00CA	GOTO	$+8
00CB	DECFSZ	STACK_1,F
00CC	GOTO	$+2
00CD	GOTO	$+4
00CE	DECFSZ	STACK_2,F
00CF	GOTO	$-1
00D0	GOTO	$-5
00D1	GOTO	$-9
00D2	MOVLW	51
00D3	MOVWF	STACK_0
00D4	MOVLW	255
00D5	MOVWF	STACK_1
00D6	DECFSZ	STACK_0,F
00D7	GOTO	$+2
00D8	GOTO	$+4
00D9	DECFSZ	STACK_1,F
00DA	GOTO	$-1
00DB	GOTO	$-5
00DC	MOVLW	136
00DD	MOVWF	STACK_0
00DE	DECFSZ	STACK_0,F
00DF	GOTO	$-1
00E0	CLRF	main_global_poweron
00E1	L_Thomas_Bro2_3:
00E1	MOVLW	1
00E2	MOVWF	ADClib_A_E_adc_read_param_channel
00E3	CALL	ADClib_A_E_adc_read
00E4	MOVF	ADClib_A_E_adc_read_result_1,W
00E5	MOVWF	main_global_brovinkel_1
00E6	MOVF	ADClib_A_E_adc_read_result_2,W
00E7	MOVWF	main_global_brovinkel_2
00E8	MOVLW	1
00E9	SUBWF	main_global_poweron,W
00EA	BTFSS	STATUS,Z
00EB	GOTO	L_Thomas_Bro2_6
00EC	L_Thomas_Bro2_5:
00EC	MOVLW	16
00ED	MOVWF	GPIO
00EE	MOVLW	65
00EF	MOVWF	STACK_2
00F0	MOVLW	255
00F1	MOVWF	STACK_3
00F2	DECFSZ	STACK_2,F
00F3	GOTO	$+2
00F4	GOTO	$+4
00F5	DECFSZ	STACK_3,F
00F6	GOTO	$-1
00F7	GOTO	$-5
00F8	MOVLW	195
00F9	MOVWF	STACK_2
00FA	DECFSZ	STACK_2,F
00FB	GOTO	$-1
00FC	nop
00FD	CLRF	GPIO
00FE	MOVLW	65
00FF	MOVWF	STACK_2
0100	MOVLW	255
0101	MOVWF	STACK_3
0102	DECFSZ	STACK_2,F
0103	GOTO	$+2
0104	GOTO	$+4
0105	DECFSZ	STACK_3,F
0106	GOTO	$-1
0107	GOTO	$-5
0108	MOVLW	195
0109	MOVWF	STACK_2
010A	DECFSZ	STACK_2,F
010B	GOTO	$-1
010C	nop
010D	GOTO	L_Thomas_Bro2_7
010E	L_Thomas_Bro2_6:
010E	L_Thomas_Bro2_7:
010E	MOVLW	1
010F	MOVWF	main_global_poweron
0110	MOVLW	0
0111	MOVWF	STACK_1
0112	MOVF	main_global_brovinkel_2,W
0113	SUBWF	STACK_1,W
0114	BTFSS	STATUS,Z
0115	GOTO	$+3
0116	MOVF	main_global_brovinkel_1,W
0117	SUBLW	63
0118	BTFSS	STATUS,C
0119	GOTO	L_Thomas_Bro2_3
011A	L_Thomas_Bro2_4:
011A	CLRF	GPIO
011B	MOVLW	11
011C	MOVWF	STACK_0
011D	MOVLW	255
011E	MOVWF	STACK_1
011F	MOVLW	255
0120	MOVWF	STACK_2
0121	DECFSZ	STACK_0,F
0122	GOTO	$+2
0123	GOTO	$+8
0124	DECFSZ	STACK_1,F
0125	GOTO	$+2
0126	GOTO	$+4
0127	DECFSZ	STACK_2,F
0128	GOTO	$-1
0129	GOTO	$-5
012A	GOTO	$-9
012B	MOVLW	51
012C	MOVWF	STACK_0
012D	MOVLW	255
012E	MOVWF	STACK_1
012F	DECFSZ	STACK_0,F
0130	GOTO	$+2
0131	GOTO	$+4
0132	DECFSZ	STACK_1,F
0133	GOTO	$-1
0134	GOTO	$-5
0135	MOVLW	136
0136	MOVWF	STACK_0
0137	DECFSZ	STACK_0,F
0138	GOTO	$-1
0139	L_Thomas_Bro2_9:
0139	MOVLW	0
013A	MOVWF	ADClib_A_E_adc_read_param_channel
013B	CALL	ADClib_A_E_adc_read
013C	MOVF	ADClib_A_E_adc_read_result_1,W
013D	MOVWF	main_global_tid_1
013E	MOVF	ADClib_A_E_adc_read_result_2,W
013F	MOVWF	main_global_tid_2
0140	CLRF	main_global_zov_1
0141	CLRF	main_global_zov_2
0142	MOVLW	0
0143	SUBWF	main_global_tid_2,W
0144	BTFSS	STATUS,Z
0145	GOTO	$+3
0146	MOVLW	100
0147	SUBWF	main_global_tid_1,W
0148	BTFSC	STATUS,C
0149	GOTO	L_Thomas_Bro2_12
014A	L_Thomas_Bro2_11:
014A	MOVLW	100
014B	MOVWF	main_global_tid_1
014C	CLRF	main_global_tid_2
014D	GOTO	L_Thomas_Bro2_13
014E	L_Thomas_Bro2_12:
014E	L_Thomas_Bro2_13:
014E	MOVF	main_global_tid_2,W
014F	SUBLW	3
0150	BTFSS	STATUS,Z
0151	GOTO	$+3
0152	MOVF	main_global_tid_1,W
0153	SUBLW	242
0154	BTFSC	STATUS,C
0155	GOTO	L_Thomas_Bro2_16
0156	L_Thomas_Bro2_15:
0156	MOVLW	2
0157	MOVWF	main_global_tid_1
0158	CLRF	main_global_tid_2
0159	GOTO	L_Thomas_Bro2_17
015A	L_Thomas_Bro2_16:
015A	L_Thomas_Bro2_17:
015A	L_Thomas_Bro2_19:
015A	MOVLW	1
015B	ADDWF	main_global_zov_1,W
015C	MOVWF	STACK_2
015D	CLRF	STACK_3
015E	MOVF	main_global_zov_2,W
015F	BTFSC	STATUS,C
0160	INCF	STACK_3,F
0161	ADDWF	STACK_3,F
0162	MOVF	STACK_2,W
0163	MOVWF	main_global_zov_1
0164	MOVF	STACK_3,W
0165	MOVWF	main_global_zov_2
0166	MOVLW	1
0167	MOVWF	main_global_loopz
0168	L_Thomas_Bro2_21:
0168	MOVLW	30
0169	MOVWF	STACK_2
016A	MOVF	main_global_loopz,W
016B	SUBWF	STACK_2,W
016C	BTFSS	STATUS,C
016D	GOTO	L_Thomas_Bro2_22
016E	MOVLW	138
016F	MOVWF	STACK_3
0170	MOVLW	255
0171	MOVWF	STACK_4
0172	DECFSZ	STACK_3,F
0173	GOTO	$+2
0174	GOTO	$+4
0175	DECFSZ	STACK_4,F
0176	GOTO	$-1
0177	GOTO	$-5
0178	MOVLW	76
0179	MOVWF	STACK_3
017A	DECFSZ	STACK_3,F
017B	GOTO	$-1
017C	nop
017D	nop
017E	CLRF	STACK_3
017F	BTFSC	gpio,3
0180	INCF	STACK_3,F
0181	MOVLW	0
0182	SUBWF	STACK_3,W
0183	BTFSS	STATUS,Z
0184	GOTO	L_Thomas_Bro2_25
0185	L_Thomas_Bro2_24:
0185	CLRF	main_global_zov_1
0186	CLRF	main_global_zov_2
0187	MOVLW	0
0188	MOVWF	ADClib_A_E_adc_read_param_channel
0189	CALL	ADClib_A_E_adc_read
018A	MOVF	ADClib_A_E_adc_read_result_1,W
018B	MOVWF	main_global_tid_1
018C	MOVF	ADClib_A_E_adc_read_result_2,W
018D	MOVWF	main_global_tid_2
018E	MOVLW	0
018F	SUBWF	main_global_tid_2,W
0190	BTFSS	STATUS,Z
0191	GOTO	$+3
0192	MOVLW	100
0193	SUBWF	main_global_tid_1,W
0194	BTFSC	STATUS,C
0195	GOTO	L_Thomas_Bro2_29
0196	L_Thomas_Bro2_28:
0196	MOVLW	100
0197	MOVWF	main_global_tid_1
0198	CLRF	main_global_tid_2
0199	GOTO	L_Thomas_Bro2_30
019A	L_Thomas_Bro2_29:
019A	L_Thomas_Bro2_30:
019A	MOVF	main_global_tid_2,W
019B	SUBLW	3
019C	BTFSS	STATUS,Z
019D	GOTO	$+3
019E	MOVF	main_global_tid_1,W
019F	SUBLW	242
01A0	BTFSC	STATUS,C
01A1	GOTO	L_Thomas_Bro2_33
01A2	L_Thomas_Bro2_32:
01A2	MOVLW	2
01A3	MOVWF	main_global_tid_1
01A4	CLRF	main_global_tid_2
01A5	GOTO	L_Thomas_Bro2_34
01A6	L_Thomas_Bro2_33:
01A6	L_Thomas_Bro2_34:
01A6	MOVLW	26
01A7	MOVWF	STACK_4
01A8	MOVLW	255
01A9	MOVWF	STACK_5
01AA	MOVLW	255
01AB	MOVWF	STACK_6
01AC	DECFSZ	STACK_4,F
01AD	GOTO	$+2
01AE	GOTO	$+8
01AF	DECFSZ	STACK_5,F
01B0	GOTO	$+2
01B1	GOTO	$+4
01B2	DECFSZ	STACK_6,F
01B3	GOTO	$-1
01B4	GOTO	$-5
01B5	GOTO	$-9
01B6	MOVLW	127
01B7	MOVWF	STACK_4
01B8	MOVLW	255
01B9	MOVWF	STACK_5
01BA	DECFSZ	STACK_4,F
01BB	GOTO	$+2
01BC	GOTO	$+4
01BD	DECFSZ	STACK_5,F
01BE	GOTO	$-1
01BF	GOTO	$-5
01C0	MOVLW	88
01C1	MOVWF	STACK_4
01C2	DECFSZ	STACK_4,F
01C3	GOTO	$-1
01C4	nop
01C5	nop
01C6	GOTO	L_Thomas_Bro2_26
01C7	L_Thomas_Bro2_25:
01C7	L_Thomas_Bro2_26:
01C7	L_Thomas_Bro2_23:
01C7	CLRF	STACK_3
01C8	INCF	STACK_3,F
01C9	MOVF	main_global_loopz,W
01CA	ADDWF	STACK_3,W
01CB	MOVWF	main_global_loopz
01CC	GOTO	L_Thomas_Bro2_21
01CD	L_Thomas_Bro2_22:
01CD	MOVF	main_global_zov_2,W
01CE	SUBWF	main_global_tid_2,W
01CF	BTFSS	STATUS,Z
01D0	GOTO	$+3
01D1	MOVF	main_global_zov_1,W
01D2	SUBWF	main_global_tid_1,W
01D3	BTFSS	STATUS,Z
01D4	GOTO	L_Thomas_Bro2_19
01D5	L_Thomas_Bro2_20:
01D5	MOVLW	4
01D6	MOVWF	GPIO
01D7	MOVLW	3
01D8	MOVWF	STACK_1
01D9	MOVLW	255
01DA	MOVWF	STACK_2
01DB	MOVLW	255
01DC	MOVWF	STACK_3
01DD	DECFSZ	STACK_1,F
01DE	GOTO	$+2
01DF	GOTO	$+8
01E0	DECFSZ	STACK_2,F
01E1	GOTO	$+2
01E2	GOTO	$+4
01E3	DECFSZ	STACK_3,F
01E4	GOTO	$-1
01E5	GOTO	$-5
01E6	GOTO	$-9
01E7	MOVLW	140
01E8	MOVWF	STACK_1
01E9	MOVLW	255
01EA	MOVWF	STACK_2
01EB	DECFSZ	STACK_1,F
01EC	GOTO	$+2
01ED	GOTO	$+4
01EE	DECFSZ	STACK_2,F
01EF	GOTO	$-1
01F0	GOTO	$-5
01F1	MOVLW	161
01F2	MOVWF	STACK_1
01F3	DECFSZ	STACK_1,F
01F4	GOTO	$-1
01F5	nop
01F6	L_Thomas_Bro2_36:
01F6	MOVLW	1
01F7	MOVWF	ADClib_A_E_adc_read_param_channel
01F8	CALL	ADClib_A_E_adc_read
01F9	MOVF	ADClib_A_E_adc_read_result_1,W
01FA	MOVWF	main_global_brovinkel_1
01FB	MOVF	ADClib_A_E_adc_read_result_2,W
01FC	MOVWF	main_global_brovinkel_2
01FD	MOVLW	36
01FE	MOVWF	GPIO
01FF	MOVLW	39
0200	MOVWF	STACK_2
0201	MOVLW	255
0202	MOVWF	STACK_3
0203	DECFSZ	STACK_2,F
0204	GOTO	$+2
0205	GOTO	$+4
0206	DECFSZ	STACK_3,F
0207	GOTO	$-1
0208	GOTO	$-5
0209	MOVLW	219
020A	MOVWF	STACK_2
020B	DECFSZ	STACK_2,F
020C	GOTO	$-1
020D	nop
020E	MOVLW	52
020F	MOVWF	GPIO
0210	MOVLW	65
0211	MOVWF	STACK_2
0212	MOVLW	255
0213	MOVWF	STACK_3
0214	DECFSZ	STACK_2,F
0215	GOTO	$+2
0216	GOTO	$+4
0217	DECFSZ	STACK_3,F
0218	GOTO	$-1
0219	GOTO	$-5
021A	MOVLW	195
021B	MOVWF	STACK_2
021C	DECFSZ	STACK_2,F
021D	GOTO	$-1
021E	nop
021F	MOVLW	1
0220	SUBWF	main_global_brovinkel_2,W
0221	BTFSS	STATUS,Z
0222	GOTO	$+3
0223	MOVLW	109
0224	SUBWF	main_global_brovinkel_1,W
0225	BTFSS	STATUS,C
0226	GOTO	L_Thomas_Bro2_36
0227	L_Thomas_Bro2_37:
0227	MOVLW	36
0228	MOVWF	GPIO
0229	MOVLW	3
022A	MOVWF	STACK_1
022B	MOVLW	255
022C	MOVWF	STACK_2
022D	MOVLW	255
022E	MOVWF	STACK_3
022F	DECFSZ	STACK_1,F
0230	GOTO	$+2
0231	GOTO	$+8
0232	DECFSZ	STACK_2,F
0233	GOTO	$+2
0234	GOTO	$+4
0235	DECFSZ	STACK_3,F
0236	GOTO	$-1
0237	GOTO	$-5
0238	GOTO	$-9
0239	MOVLW	140
023A	MOVWF	STACK_1
023B	MOVLW	255
023C	MOVWF	STACK_2
023D	DECFSZ	STACK_1,F
023E	GOTO	$+2
023F	GOTO	$+4
0240	DECFSZ	STACK_2,F
0241	GOTO	$-1
0242	GOTO	$-5
0243	MOVLW	161
0244	MOVWF	STACK_1
0245	DECFSZ	STACK_1,F
0246	GOTO	$-1
0247	nop
0248	MOVLW	4
0249	MOVWF	GPIO
024A	MOVLW	3
024B	MOVWF	STACK_1
024C	MOVLW	255
024D	MOVWF	STACK_2
024E	MOVLW	255
024F	MOVWF	STACK_3
0250	DECFSZ	STACK_1,F
0251	GOTO	$+2
0252	GOTO	$+8
0253	DECFSZ	STACK_2,F
0254	GOTO	$+2
0255	GOTO	$+4
0256	DECFSZ	STACK_3,F
0257	GOTO	$-1
0258	GOTO	$-5
0259	GOTO	$-9
025A	MOVLW	140
025B	MOVWF	STACK_1
025C	MOVLW	255
025D	MOVWF	STACK_2
025E	DECFSZ	STACK_1,F
025F	GOTO	$+2
0260	GOTO	$+4
0261	DECFSZ	STACK_2,F
0262	GOTO	$-1
0263	GOTO	$-5
0264	MOVLW	161
0265	MOVWF	STACK_1
0266	DECFSZ	STACK_1,F
0267	GOTO	$-1
0268	nop
0269	MOVLW	1
026A	MOVWF	main_global_loopz
026B	L_Thomas_Bro2_38:
026B	MOVLW	4
026C	MOVWF	STACK_1
026D	MOVF	main_global_loopz,W
026E	SUBWF	STACK_1,W
026F	BTFSS	STATUS,C
0270	GOTO	L_Thomas_Bro2_39
0271	MOVLW	26
0272	MOVWF	STACK_2
0273	MOVLW	255
0274	MOVWF	STACK_3
0275	MOVLW	255
0276	MOVWF	STACK_4
0277	DECFSZ	STACK_2,F
0278	GOTO	$+2
0279	GOTO	$+8
027A	DECFSZ	STACK_3,F
027B	GOTO	$+2
027C	GOTO	$+4
027D	DECFSZ	STACK_4,F
027E	GOTO	$-1
027F	GOTO	$-5
0280	GOTO	$-9
0281	MOVLW	127
0282	MOVWF	STACK_2
0283	MOVLW	255
0284	MOVWF	STACK_3
0285	DECFSZ	STACK_2,F
0286	GOTO	$+2
0287	GOTO	$+4
0288	DECFSZ	STACK_3,F
0289	GOTO	$-1
028A	GOTO	$-5
028B	MOVLW	88
028C	MOVWF	STACK_2
028D	DECFSZ	STACK_2,F
028E	GOTO	$-1
028F	nop
0290	nop
0291	L_Thomas_Bro2_40:
0291	CLRF	STACK_2
0292	INCF	STACK_2,F
0293	MOVF	main_global_loopz,W
0294	ADDWF	STACK_2,W
0295	MOVWF	main_global_loopz
0296	GOTO	L_Thomas_Bro2_38
0297	L_Thomas_Bro2_39:
0297	MOVLW	4
0298	MOVWF	GPIO
0299	L_Thomas_Bro2_41:
0299	MOVLW	1
029A	MOVWF	ADClib_A_E_adc_read_param_channel
029B	CALL	ADClib_A_E_adc_read
029C	MOVF	ADClib_A_E_adc_read_result_1,W
029D	MOVWF	main_global_brovinkel_1
029E	MOVF	ADClib_A_E_adc_read_result_2,W
029F	MOVWF	main_global_brovinkel_2
02A0	MOVLW	4
02A1	MOVWF	GPIO
02A2	MOVLW	65
02A3	MOVWF	STACK_2
02A4	MOVLW	255
02A5	MOVWF	STACK_3
02A6	DECFSZ	STACK_2,F
02A7	GOTO	$+2
02A8	GOTO	$+4
02A9	DECFSZ	STACK_3,F
02AA	GOTO	$-1
02AB	GOTO	$-5
02AC	MOVLW	195
02AD	MOVWF	STACK_2
02AE	DECFSZ	STACK_2,F
02AF	GOTO	$-1
02B0	nop
02B1	MOVLW	20
02B2	MOVWF	GPIO
02B3	MOVLW	65
02B4	MOVWF	STACK_2
02B5	MOVLW	255
02B6	MOVWF	STACK_3
02B7	DECFSZ	STACK_2,F
02B8	GOTO	$+2
02B9	GOTO	$+4
02BA	DECFSZ	STACK_3,F
02BB	GOTO	$-1
02BC	GOTO	$-5
02BD	MOVLW	195
02BE	MOVWF	STACK_2
02BF	DECFSZ	STACK_2,F
02C0	GOTO	$-1
02C1	nop
02C2	MOVLW	0
02C3	SUBWF	main_global_brovinkel_2,W
02C4	BTFSS	STATUS,Z
02C5	GOTO	$+3
02C6	MOVLW	63
02C7	SUBWF	main_global_brovinkel_1,W
02C8	BTFSC	STATUS,C
02C9	GOTO	L_Thomas_Bro2_41
02CA	L_Thomas_Bro2_42:
02CA	MOVLW	4
02CB	MOVWF	GPIO
02CC	MOVLW	16
02CD	MOVWF	STACK_1
02CE	MOVLW	255
02CF	MOVWF	STACK_2
02D0	MOVLW	255
02D1	MOVWF	STACK_3
02D2	DECFSZ	STACK_1,F
02D3	GOTO	$+2
02D4	GOTO	$+8
02D5	DECFSZ	STACK_2,F
02D6	GOTO	$+2
02D7	GOTO	$+4
02D8	DECFSZ	STACK_3,F
02D9	GOTO	$-1
02DA	GOTO	$-5
02DB	GOTO	$-9
02DC	MOVLW	76
02DD	MOVWF	STACK_1
02DE	MOVLW	255
02DF	MOVWF	STACK_2
02E0	DECFSZ	STACK_1,F
02E1	GOTO	$+2
02E2	GOTO	$+4
02E3	DECFSZ	STACK_2,F
02E4	GOTO	$-1
02E5	GOTO	$-5
02E6	MOVLW	206
02E7	MOVWF	STACK_1
02E8	DECFSZ	STACK_1,F
02E9	GOTO	$-1
02EA	CLRF	GPIO
02EB	MOVLW	16
02EC	MOVWF	STACK_1
02ED	MOVLW	255
02EE	MOVWF	STACK_2
02EF	MOVLW	255
02F0	MOVWF	STACK_3
02F1	DECFSZ	STACK_1,F
02F2	GOTO	$+2
02F3	GOTO	$+8
02F4	DECFSZ	STACK_2,F
02F5	GOTO	$+2
02F6	GOTO	$+4
02F7	DECFSZ	STACK_3,F
02F8	GOTO	$-1
02F9	GOTO	$-5
02FA	GOTO	$-9
02FB	MOVLW	76
02FC	MOVWF	STACK_1
02FD	MOVLW	255
02FE	MOVWF	STACK_2
02FF	DECFSZ	STACK_1,F
0300	GOTO	$+2
0301	GOTO	$+4
0302	DECFSZ	STACK_2,F
0303	GOTO	$-1
0304	GOTO	$-5
0305	MOVLW	206
0306	MOVWF	STACK_1
0307	DECFSZ	STACK_1,F
0308	GOTO	$-1
0309	GOTO	L_Thomas_Bro2_9
030A	L_Thomas_Bro2_10:
030A	GOTO	$
	;---endproc---
______________________________ Slut på fil ______________________________ 




program Thomas_Bro2;
 //******************************************************************************
 // microcontroller : P12f675
 //
 // Svenska.
 // Projekt: Thomas styrsystem för klaffbro
 // Detta projekt är disangat att fungera med PIC 12F675
 // med några mindre ändringar bör det fungera med andra PIC MCU.
 //
 // Denna kod driver en motor på GP3 och GP2.
 // ADC konverterningens värde anger vinkeln bron har och vänte tiden
 // mellan varje bro rörelse.
 //
 // English.
 // Project: Thomas controls system for drawbridge
 // This project is designed to work with PIC 12F675
 // with minor adjustments, it should work with any other PIC MCU.
 //
 // This code drives a motor at GP3 and GP2.
 // ADC conversion value determinate the angel for bridge and the wainting time
 // betwen the bridge events.
 //******************************************************************************
 //program adc_leds;
var Zov,BroVinkel,Tid : word;
    Loopz,PowerON:Byte;

Begin
 //Setup
 GPIO := 0;
 CMCON := 7;
 TRISIO := 0;           // designate gpio as output
 SetBit(TRISIO,ANS0);   // pin ANS0 as input
 SetBit(TRISIO,ANS1);   // pin ANS1 as input
 ClearBit(ADCON0,VCFG); // Vdd as Vref

// Power ON visning 5 blink
// Power ON show 5 blink
 GPIO := $04;   // Tänder LED       1101 1111=DF Orginal
 delay_ms(1000);
 For PowerON:=1 to 5 do
 Begin
  GPIO := $04;   // Tänder LED       1101 1111=DF Orginal
                 //                  0010 0000=20
  delay_ms(400);
  GPIO := $00;   // Släcker alla LED 1111 1111=FF Orginal
                 //                  0000 0000=00
  delay_ms(400);
 End;

 // Kontrollerar att bron är nere
 // Controlls if bridge is down
 GPIO := $00;
 delay_ms(2000);
 PowerON:=0;
 repeat
 Begin
  BroVinkel:=ADC_read(ANS1);  // ADC conversion
  If PowerON=1 then
  Begin          //Block av - Relä (av)läge ner - Motor på * Block off - Relay (Off) pos. down - Motor on
   GPIO := $10;  //Bron var inte nere säncker bron! ******** bridge is not down!
   delay_ms(50);//Pulserar motorstömen för långsam gång *** Pulse motorpower for slow run
   GPIO := $00;  //Block av - Relä (av)läge ner - Motor av * Block off - Relay (Off) pos. down - Motor off
   delay_ms(50);
  End;
  PowerON:=1;
 End;
 until BroVinkel<=63; // <--- Ner värdet 1 ------------------------------------
 GPIO := $00;
 delay_ms(2000);

// Huvud progrsm
// Main program
 repeat         // beginning of a repeat endless loop
 Begin
 
 
 
  // Väntar inställd tid
  // Want for set time
  //GPIO := $00;
  Tid:=ADC_read(ANS0);        // ADC conversion
  Zov:=0;
  If Tid<100 then
  Begin
   Tid:=100;         // 6=Test 100=Normal
   //GPIO:=$34;      // Tag Bort * Remove
   //delay_ms(2000); // Tag Bort * Remove
  End;
  If Tid>1010 then
  Begin
   Tid:=2;           // 6=Test 100=Normal
  End;
  //GPIO := $00;     // Tag Bort * Remove
  //delay_ms(500);   // Tag Bort * Remove
  
  
  Repeat
  Begin
   Zov:=Zov+1; // Antal varv att vänta * Number of lap too want
   for Loopz:=1 to 30 do
   Begin
    //GPIO:=$20;                // Tag Bort
    delay_ms(106); // Tid att vänta * Loopz värdet
    IF TestBit(GPIO,3)=0 Then
    Begin
     Zov:=0;              // Nollar tidsräknaren * Reset timecount
     //GPIO:=$04;         // Tag Bort * Remove
     Tid:=ADC_read(ANS0); // ADC conversion
     If Tid<100 then
     Begin
      Tid:=100;           // 6=Test 100=Normal
     End;
     If Tid>1010 then
     Begin
      Tid:=2;             // 6=Test 100=Normal
     End;
     delay_ms(5000);      // Väntar ca: 5 Sekunder * Wants 5 Sec.
    End;
   End;
   //GPIO:=$00;           // Tag Bort
   //delay_ms(200);
  End;
  until Tid=Zov; // Klart att höja bron
                 // Clear too take up the bridge

   

  // Höjer bron * Up bridge
  GPIO:=$04;     // Block på - Relä (av)läge ner - Motor av
  Delay_ms(500); // Block on - Relay (Off) pos. down - Motor off
  repeat
  Begin
   BroVinkel:=ADC_read(ANS1); // ADC conversion
   GPIO:=$24;     // Block på - Relä (på)läge upp - Motor av
   Delay_ms(30); // Block on - Relay (on) pos. up - Motor off
   GPIO:=$34;
   Delay_ms(50); // Block på - Relä (på)läge upp - Motor på
  End;            // Block on - Relay (on) pos. up - Motor on
  until BroVinkel>=365; // <---- Upp värdet ---------------------------------------------
  GPIO:=$24;     // Block på - Relä (på)läge upp - Motor av
  Delay_ms(500); // Block on - Relay (on) pos. up - Motor off
  GPIO:=$04;       // Block på - Relä (av)läge ner - Motor av
  Delay_ms(500);   // Block on - Relay (Off) pos. down - Motor off

   
   
  //Väntar i 20Sekunder * Wants 20 Sec
  For Loopz:=1 to 4 do
  Begin
   Delay_ms(5000);
  End;
  // 5000mS = 5 Sekunder.
  // 5 * 4 = 20 Sekunder.
   
   
   
   //Sänker bron
  GPIO:=$04;     //Block på - Relä (av)läge ner - Motor av * Block on - Relay (Off) pos. down - Motor off
  repeat
  Begin
   BroVinkel:=ADC_read(ANS1); // ADC conversion
   GPIO:=$04;    // Block på - Relä (av)läge ner - Motor av
   Delay_ms(50);// Block on - Relay (Off) pos. down - Motor off
   GPIO:=$14;       // Block på - Relä (av)läge ner - Motor på
   Delay_ms(50);   // Block on - Relay (Off) pos. down - Motor on
  End;
  until BroVinkel<63; // <---- Ner värdet -----------------------------------------
  GPIO:=$04;     // Block på - Relä (av)läge ner - Motor av
  delay_ms(3000);// Block on - Relay (Off) pos. down - Motor off
  GPIO:=$00;        // Block av - Relä (av)läge ner - Motor av
  delay_ms(3000);   // Block off - Relay (Off) pos. down - Motor off
 End;
 until 0 = 1;     // endless loop (as this condition is never satisfied)
end.
______________________________ Slut på fil ______________________________ 
Skriv svar