Komparátor 16F628A - assembler

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Komparátor 16F628A - assembler

Príspevok od používateľa mat100 » 29 Okt 2010, 12:43

Hoj

Prosím poraďte

Píši program , pro odpojovač zátěže a potřebuji použít dva komparátory . Bohužel se nikde nemohu dočíst , na jaké piny mají výstup . V datasheetu se píše něco o pinech RA4 a RA3 , ale RA3 může být neinvertující vstup . Jak to tedy je ? Prosím poraďte

S pozdravem mat100
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 29 Okt 2010, 13:44

datasheet strana 64

RA0+RA3
RA1+RA2
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 29 Okt 2010, 15:09

To jo , ale to jsou vstupy ! Já právě nevim , kde sou výstupy ?
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 29 Okt 2010, 15:22

jááj, nepozorne čítam.

no tak to je tuším register CMCON a ako píšeš RA4, RA3 a kde je problém ?
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 29 Okt 2010, 16:15

Hm

Asi sem to stejně nepochopil , protože mi komparátor nefunguje !

Tady mam program , kterej má rozsvěce / zhasínat led podle toho , jestli je vyšší napětí na RA1 , nebo RA2

Prosím mohl by jste mi někdo najít chybu ?
LIST P=16F628A
INCLUDE<P16F628A.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF &

_INTRC_OSC_NOCLKOUT


#DEFINE LED1 PORTB,1
#DEFINE TL1 PORTA,4

CLRF PORTA ; smazat A
CLRF PORTB ; smazat B
MOVLW B'00000100' ; typ komparátoru
MOVWF CMCON
BSF STATUS,RP0
MOVLW B'00000111' ; 0,1,2 vstupy
MOVWF TRISA
MOVLW B'00000000' ; výstupy
MOVWF TRISB
BCF STATUS,RP0


START BTFSC TL1
CALL ZAP
CALL VYP

ZAP BSF LED1
GOTO START
RETURN

VYP BCF LED1
GOTO START
RETURN

END
Prílohy
6666.txt
(550 Bajtov) 61 stiahnutí
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 29 Okt 2010, 18:00

si ma zmiatol tým TL1 ... ak potrebuješ zistiť stav komp. výstupu, tak jedine v CMCON teda v tvojom prípade C2OUT. lebo RA4 by si musel pred meraním nadstaviť ako vstup. a ja som na to zbežne kukol, a myslel som si že TL1 je tlačítko
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 30 Okt 2010, 21:20

Hoj

Zase vás prosím o radu ! :cry:

Už jsem vyzkoušel snad vše , ale stále mi překladač vypisuje chybu :

Napsal jsem si program na trvalé odpojení baterie . Ve zkratce : Když se překlopí komparátor do vysoké úrovně , odpojí se zátěž spínaná BUZ11. Stav ( vypnuto ) se zároveň uloží do eeprom , kde vydrží i po odpojení baterie . Prostě už se to samo nezpustí ! Musí se zmáčknou tlačítko TL1

Přikládám zdroják :

Problém nastává v překladu , kdy mi programátor vypíše tuto chybu :
Error[108] C:\DOCUMENTS AND SETTINGS\MATěJ\PLOCHA\66665.ASM 84 : Illegal character (,)

Jedná se o toto místo programu :
LIST P=16F628A
INCLUDE<P16F628A.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT


#DEFINE BUZ11 PORTB,1
#DEFINE KOMP CMCON,7
#DEFINE TL1 PORTB,2


CISLO equ 20h ; data pro zapis do EEPROM
EADR equ 21h ; adresa pro EEPROM
CISLB equ 22h
CISLA equ 23h


CLRF PORTA ; smazat A
CLRF PORTB ; smazat B
MOVLW B'00000100' ; typ komparátoru
MOVWF CMCON
BSF STATUS,RP0
MOVLW B'00001111'
MOVWF TRISA
MOVLW B'00000100' ; výstupy
MOVWF TRISB
BCF STATUS,RP0


START BTFSC TL1
CALL RESET
CALL READ
KOM BTFSC KOMP
CALL ODPOJ
GOTO START

ODPOJ BCF BUZ11
MOVLW 0
MOVWF CISLO
CALL WRITE
RETURN

RESET CLRF CISLB
CLRF CISLA
ZNOVU BTFSC TL1
GOTO RESET
INCFSZ CISLB,1
GOTO ZNOVU
INCFSZ CISLA,1
GOTO ZNOVU
BSF BUZ11
MOVLW 1
MOVWF CISLO
CALL WRITE
GOTO KOM
RETURN

WRITE BTFSC EECON1,WR ; je zápis již dokončen
GOTO WRITE ; čekání na dokončení zápisu
MOVF EADR,0 ; příprava adresy ke čtení do W
BSF STATUS,RP0 ; volba banky 1
MOVWF EEADR ; nastavení adresy EEPROM
BCF STATUS,RP0 ; volba banky 0
MOVF CISLO,0 ; příprava dat k zápisu do W
BSF STATUS,RP0 ; volba banky 1
MOVWF EEDATA ; nastavení dat k zápisu do EEPROM
BSF EECON1,WREN ; povolení zápisu do EEPROM
BCF INTCON,GIE ; zákaz všech přerušení
MOVLW H'55' ; 1 odemykací kód
MOVWF EECON2 ; zápis 1. kódu
MOVLW H'AA' ; 2 odemykací kód
MOVWF EECON2 ; zápis 2 kódu
BSF EECON1,WR ; zapnutí požadavku k zápisu bajtu
BCF EECON1,WREN ; zákaz dalšího zápisu do EEPROM
BSF INTCON,GIE ; povolení přerušení
BCF STATUS,RP0
RETURN

READ MOVF EADR,0 ; příprava adresy ke čtení do W
BSF STATUS,RP0 ; volba banky 1
MOVWF EEADR ; nastavení adresy EEPROM
BSF EECON1,RD ; zapnutí požadavku ke čtení bajtu
MOVF EEDATA,0 ; načtení bajtu do registru W
BCF STATUS,RP0 ; volba banky 0
MOVWF BUZ11
RETURN

END

Když v tomto místě přepíšu funkci MOVWF na jinou ( třeba BSF) , tak se program přeloží bez chyby.

Potřebuji , aby když se z eeprom vyčte stav , aby se tento stav přenesl na portB 1

Prosím poraďte :wink:
Prílohy
66665.asm
(1.92 KiB) 62 stiahnutí
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 30 Okt 2010, 21:30

no BUZZ11 si definoval ako 1byt PORTUB teda ako RB1 a chces do neho zapísať 8bit cislo
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 30 Okt 2010, 21:32

Hoj

Děkuji za odpověď

Jak osmibitové ? Vždyť tam je jen číslo 1 ( 0 ) ne ?

Prosím poraď jak to tedy upravit ?
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 30 Okt 2010, 22:24

no neni tam len jeden byt teda 0(1), ale v eeprom je jeden bajt teda 8 čísel a tie načítavaš z eeprom do W a z W do BUZ11, ale to si definoval ako RB1, takže iba ako jedno číslo a nie ako 8 čísiel



kukol som si na rýchlo ten tvoj program a neni mi jasne mačo tam je vlastne ten BUZ11, raz do neho zapíšeš 0 raz 1 a potom raz chceš do neho vložiť 8 čísel.

proste ho vymaž, ten posledný riadok .....
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 31 Okt 2010, 10:58

Smazat Buz11 nelze ! Má tam svou funkci !

Jinak už se mi to povedlo , takže přikládám zdroják !

Jen je to takové neohrabané . Při přečtení eeprom se změní stav všech pinů PORTUB

No , ale funkci to plní !

To mato3000 děkuji :wink:
Prílohy
lipol.asm
(3.15 KiB) 69 stiahnutí
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 31 Okt 2010, 13:01

ešte jedna otázočka, načo tam je ten zápis do eeprom ?
0

exekutor
Stály člen
Stály člen
Príspevky: 295
Dátum registrácie: 28 Jún 2009, 00:00

Príspevok od používateľa exekutor » 31 Okt 2010, 13:08

START BTFSC TL1
CALL ZAP
CALL VYP

ZAP BSF LED1
GOTO START
RETURN

VYP BCF LED1
GOTO START
RETURN

TU mas jednu velku logicku chybu, ale zrejme o nej vies,pisem len keby nahodou si nevedel.
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 31 Okt 2010, 13:51

děkuji za uporoznění to exekutor ! V nové verzi už toto není !

to mato3000.

To uložení do eeprom je tam proto , aby při odpojení napájení si procesor pomotoval , zda byla ( nebyla ) baterie odpojena !

Už je mi to samotnému hloupé , ale zase si nevím rady !

Potřebuji použít integrovaný VOLTAGE REFERENCE
MODULE pro dva integrované OZ

Vůbec jsem z datasheetu nepochopil nastavení napětí . Mohl by jste mi někdo prosím ukázat , jak vypočítat hodnotu 0 - 3 bitu pro různá napětí ?

Předem děkuji
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 31 Okt 2010, 17:05

no ak používaš tú eeprom, tak si saprav nejaké čakacie doby na tom meraní, lebo ti odíde tá eeprom. teda teraz robíš meranie xkrát za sekundu, ideálne by bolo tak 1xsek, 1x2sek
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 31 Okt 2010, 17:22

Hoj

Děkuji za radu

Ale já do eprom zapisuju tak jednou do tejdne ( při vybitej baterce , nebo při zmáčknutí tlačítka reset ) a čtu tak maximálně 2 x do minuty. Je tedy třeba ty čekací doby ?

Stačí , když jsem do hlavního programu doplnil část se zobrazování stavu baterie na 3 led ? Zdrží to dostatečne měření ?

Upravená verze je v příloze !
;----------------------------------------------------------------------
;Vlastní program
;----------------------------------------------------------------------

START BTFSC TL1 ; otestuj , zda stisk reset
CALL RESET ; pokud ano , tak vyresetuj ( 1 )
BTFSC KOMPAR ; pokud ne, otestuj komparátor
CALL ODPOJ ; pokud je ve stavu 1 , odpoj zátěž
CALL STAV ; zkontroluj stav baterie a zobraz na led
GOTO START ; jdi na začátek

;----------------------------------------------------------------------
;Podprogramy
;----------------------------------------------------------------------

STAV BCF LEDV ; zhasni všechny tři led
BCF LEDS
BCF LEDN
BTFSC KOMPAR1 ; otestuj komparátor 1/2 baterie
CALL LED ; pokud 1 jdi na led
BSF LEDV ; pokud 0 rozsviť LED plné baterie
STAV1 BTFSS BUZ11 ; otestuj zda není odpojená záťěž
BSF LEDN ; pokud je rozsviť led vybité baterie
RETURN

LED BSF LEDS ; rozsviť led 1/2 baterie
GOTO STAV1 ; jdi na stav1
RETURN
A prosím poraď s tím nastavením reference .

S pozdravem mat100
Prílohy
lipol.asm
(3.49 KiB) 60 stiahnutí
0

exekutor
Stály člen
Stály člen
Príspevky: 295
Dátum registrácie: 28 Jún 2009, 00:00

Príspevok od používateľa exekutor » 31 Okt 2010, 17:41

nedas si povedat. Robis hrubu chybu v podprogramoch !
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 31 Okt 2010, 17:46

return vyhoď ....

nechápem tvoju otázku o nadstavení referencie, viac to popíš


ešte k tej rýchlosti. ak sa ti nabije baterka, tak sa odpojí a program bude predsa bežať ďalej, a potom sa ti bude do eeprom stále zapisovať nejaké číslo. neviem či si si to meral ale ten celý cyklus trvá 40uSek pri 4MHz ... odíde ti ta eepromka
0

Používateľov profilový obrázok
mat100
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1360
Dátum registrácie: 07 Feb 2010, 00:00
Bydlisko: Plzen - jih
Vek: 30

Príspevok od používateľa mat100 » 31 Okt 2010, 17:52

To exekutor

nechapu ? Tu část , kterou si psal v programu vůbec nemám . Prosím označ mi , kde mám chybu . Vůbec netuším , protože mi program frčí.

to mato3000

prosím poraď jak je to s nastavením VOLTAGE REFERENCE
MODULE

16F628 má možnost nastavit vnitřní referenci . ( velikost napětí )
Jenže z datasheetu jsem nepochopil , jak se zapíše to napětí do 4 bitů.

Mohl by jsi se na to mrknout ?

Předem oboum děkuji

S pozdravem mat100
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Príspevok od používateľa mato3000 » 31 Okt 2010, 18:12

.
.
.
LED BSF LEDS ; rozsviť led 1/2 baterie
GOTO STAV1 ; jdi na stav1
RETURN


za goto nejde return ...

kuknem sa ti na to ....


bit 5 VRR: VREF Range Selection bit
1 = Low range
0 = High range
bit 4 Unimplemented: Read as ‘0’
bit 3-0 VR<3:0>: VREF Value Selection bits 0 ≤ VR <3:0> ≤ 15
When VRR = 1: VREF = (VR<3:0>/ 24) * VDD
When VRR = 0: VREF = 1/4 * VDD + (VR<3:0>/ 32) * VDD


VR = 0-15 <3:0>

takže ak je VR napr 0010 = 2 DEC , Vdd 5V a VRR=0

Vref= (2/24)*5=0.41666 V

a spon ja som to tak pochopil
0
Naposledy upravil/-a mato3000 v 31 Okt 2010, 18:28, upravené celkom 2 krát.

Napísať odpoveď