hallo,
Ik ben een tijdje geleden begonnen met asm te leren aan de hand van die tutorial van hier op de site. Ik heb toen zelf een looplicht gemaakt en deze steeds verder uitgebreid. Toen leek het me wel leuk om wat met de A/d converter te doen en heb ik dus dit progje gemaakt:
iporta EQU 85h
porta EQU 05h
iportb EQU 86h
portb EQU 06h
ADCON0 EQU 1Fh
ADCON1 EQU 9Fh
adres EQU 1Eh
teller EQU 20h
__CONFIG H'3FF2'
;************************************************************************
ORG 00h
MOVLW b'01000001'
MOVWF ADCON0 ;stel A/D juist in
BSF 03, 5
MOVLW b'00000100'
MOVWF ADCON1 ;stel A/D juist in.
CLRF iportb
MOVLW b'11111111'
MOVWF iporta ;porta als input
BCF 03, 5
;***********************************************************************
begin MOVLW d'4'
MOVWF teller
aftellen DECFSZ teller, 1 ;vertraging voor de A/D converter
GOTO aftellen
BSF ADCON0, 2 ;start de conversie
checkklaar BTFSC ADCON0, 2 ;kijk of de conversie klaar is
GOTO checkklaar ;zo niet, ga dan maar weer terug
MOVF adres, 0 ;zet de waarde van de A/D converter in W
MOVWF portb ;Zet W (dus de waarde van de A/D) in portb
GOTO begin ;begin weer opnieuw
END
deze code werkte dus goed. Toen leek het me leuk om deze en dat looplicht te combineren en dat je dus met een potmeter de snelheid kon bepalen. Dit werd toen mijn code:
iporta EQU 85h
porta EQU 05h
iportb EQU 86h
portb EQU 06h
s1 EQU 20h
s2 EQU 21h
teller EQU 22h
teller2 EQU 23h
teller4 EQU 24h
ADCON0 EQU 1Fh
ADCON1 EQU 9Fh
adres EQU 1Eh
analoog EQU 44h
__CONFIG H'3FF2'
;************************************************************************
ORG 00h
MOVLW b'01000001'
MOVWF ADCON0 ;stel het AD control0 register in
BSF 03, 5 ;ga naar bank1
MOVLW b'00000100'
MOVWF ADCON1 ;stel het AD control1 register in
CLRF iportb ;portb als output
MOVLW b'11111101'
MOVWF iporta ;porta als input
BCF 03, 5 ;ga terug naar bank0
;***********************************************************************
begin MOVLW d'1'
MOVWF s1 ;laat rechter ledje oplichten
MOVLW d'128'
MOVWF s2 ;laat linker ledje oplichten
MOVF s2, 0
IORWF s1, 0 ;voeg links en rechts samen
MOVWF portb ;laat de ledjes zien
begin1 MOVLW d'4'
MOVWF teller4
aftellen DECFSZ teller4, 1
GOTO aftellen ;vertraging voor de a/d converter
BSF ADCON0, 2 ;start de conversie
checkklaar BTFSC ADCON0, 2 ;check of hij klaar is
GOTO checkklaar ;ga terug als hij nog niet klaar is
MOVF adres, 0
MOVWF analoog ;zet de waarde van de a/d converter in analoog
verder MOVLW d'60' ;begin van vertragibg
MOVWF teller2
verder2 MOVLW d'60'
MOVWF teller
verder3 DECFSZ teller, 1
GOTO verder3
DECFSZ teller2, 1
GOTO verder2
DECFSZ analoog, 1
GOTO verder ;einde van vertraging
BTFSC s2, 1 ;kijk of hij tegen de kant aan botst
GOTO teveel ;ga naar teveel als hij tegen e kant aan botst
BTFSC s1, 7 ;kijk of hij tegen de kant aan botst
GOTO teveel ;ga naar teveel als hij tegen e kant aan botst
BTFSC s1, 3 ;kijk of hij elkaar raakt in het midden
GOTO terugkaats ;voor als de ledjes elkaar raken
RLF s1, 1 ;ga naar links
RRF s2, 1 ;ga naar rechts
MOVF s2, 0 ;zet ed rechter in W
IORWF s1, 0 ;voeg links en rechts samen
MOVWF portb ;laat de ledjes zien
verder4 MOVLW d'60' ;begin van vertraging
MOVWF teller2
verder5 MOVLW d'60'
MOVWF teller
verder6 DECFSZ teller, 1
GOTO verder6
DECFSZ teller2, 1
GOTO verder5
DECFSZ analoog, 1
GOTO verder4
GOTO begin1 ;einde van vertraging
teveel MOVLW d'1' ;reset de ledjes weer
MOVWF s1
MOVLW d'128'
MOVWF s2
MOVF s2, 0
IORWf s1, 0
MOVWF portb
GOTO verder4
terugkaats RLF s1, 1 ;zorgt ervoor dat je niet 2x ledje 4+5 ziet aangaan.
RLF s1, 1
RRF s2, 1
RRF s2, 1
MOVF s2, 0
IORWF s1, 0
MOVWF portb
GOTO verder4
END
Het looplicht heeft dus 2 ledjes die dan naar elkaar toebewegen en als ze elkaar dan reken dat ze dan weer naarbuiten gaan. tot zover doet hij het, maar ik kan de snelheid niet regelen met de pot:( ookal hang ik hem aan de vcc of aan de vss, de snelheid veranderd niet... Waar kan dit aan liggen?
alvast bedankt
Aedolon
Just face it: sometimes nobody envies you. There has to be a bottom and that bottom is probaly you. // http://www.amazon.com/o/registry/VWZ93N4Y6XQT
Ik heb de code niet gelezen maar hang je de pot tussen Vcc en gnd en de loper aan de A/D conv ingang ?
Op 27 juli 2003 18:54:34 schreef Aedolon:
Ik heb de code niet gelezen maar hang je de pot tussen Vcc en gnd en de loper aan de A/D conv ingang ?
loper aan de A/D, en dan een aansluiting aan de vcc en dan nog op de ingang van de AD een 10k R naar de gnd... Het werkte wel gewoon met de eerste code (gewoon een AD converter die het laat zien aan de hand van ledjes op portb). De pot is ook niet kapot want de snelheid veranderd niet als ik hem aan de vcc of de gnd hang bijv...
k.p.meinesz
Een schizofreen is nooit alleen!
Op 27 juli 2003 18:47:24 schreef Wouter Sijm:
hallo,
en nog veel meeralvast bedankt
ik heb het ff doorgeplozen en volgens mij zou het moeten werken
Ra0=analog input
Vref=VDD
dus houd ik de volgende optie
ra0 analoog is defect probeer eens een andere poort
als de analoog digitaal converter goed werkt zal hij gewoon werken
gooi je eerste proggie er nog eens in kijken of die nog werkt
waar is die __config statment voor?
[Bericht gewijzigd door k.p.meinesz op ]
an0 is niet kapot, maar ik heb de oplossing al zelf gevonden. Ik bedacht me ineens dat waneer hij bij de 2e delay aankomt, dat dan de waarde van analoog natuurlijk 0 is omdat hij bij de eerste delay al werd af geteld tot nul. Ik heb simpel nu bij de regel van de 2e delay(DECFSZ analoog, 1) vervangen door DECFSZ adres, 1. deze had ik in het begin gelijk gesteld aan elkaar en heeft die dus dezelfde waarde als analoog had voor het aftrekken. En die __config regel is om het configword in te stellen op h'3FF'. Mijn progger werkt namelijk niet goed onder ic-prog en heeft dus een eigen progamma, maar daar kan je de fuses niet bij instellen, maar als ik hem dan wil proggen geeft hij een foutmelding en nu dus niet. Hartelijk dank voor alle reacties!