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

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...

Op 27 juli 2003 18:47:24 schreef Wouter Sijm:
hallo,
en nog veel meer

alvast 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!