Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Basic
Basic Forum d'entraide sur la programmation en langage Basic
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 15/02/2007, 21h18   #1 (permalink)
Invité de passage
 
Date d'inscription: février 2007
Messages: 2
Par défaut Programmation MC 68HC11 PortE Potentiomètre

Bonjour a tous
Je suis actuellement en classe de Terminale et je conçois a ce titre une maquette dans laquelle j'utilise un 68HC11
Or je n'ai que peu de connaissances sur celui-ci et sur la maniere de le programmer
J'utilise un potentiometre sur le port A, et mon but est de renvoyer les informations fournies par celui ci sur le port B, dans le vue d'alimenter une série de DEL
Si quelqu'un pouvait m'aider, ou me faire parvenir un programme qui correspond sensiblement a mon probleme, je lui en serait très reconnaissant
Bonne soirée
synapsus62 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/02/2007, 15h57   #2 (permalink)
Membre Expert
 
Date d'inscription: juin 2002
Messages: 1 296
Par défaut

Salut !

Rappel : base des registres = $1000 par défaut (voir doc ou selon modif...)

Registre ADCTL = base + $30
Bit 7 : CCF en lecture seule
- 0 si écriture dans ADCTL et lance la conversion (ou relance s'il y en a une en cours)
- 1 lorsque la conversion est terminée (4 conversions consécutives stockées dans les 4 ADR)
Bit 5 : SCAN
Bit 4 : MULT
Bit 3 à 0 : CD CC CB CA (ligne de décodage : 0 pour AN0, 1 pour AN1, 2 pour AN2 etc...)

Registres ADR1..ADR4 consécutifs à partir de base + $31

Si SCAN = 0 et MULT = 0, on a 4 conversions consécutives appliquées sur la ligne sélectionnée.

Donc :

- Ecrire sur ADCTL 00000ccc (ccc code de l'entrée, ici la notation est en binaire) donc CCF passe à 0 et la conversion commence...
- Tester CCF tant qu'il est 0 ou bien tester si la valeur de ADCTL est toujours égale à celle qu'on a écrit...
- Lorsque CCF == 1, la conversion est valide dans ADR1...ADR4

Voir également la doc pour le registre OPTION (base + $39)
Bit 7 : ADPU A/D Power-Up
0 = A/D powered down
1 = A/D powered up
Bit 6 : CSEL Clock Select Bit
0 = A/D and EEPROM use system E clock.
1 = A/D and EEPROM use internal RC clock.

OPTION n'est accessible en écriture que dans des conditions particulières (voir doc).

La doc (gratuite) était disponible sur le site de motorola (toutes déclinaisons + application notes), je ne sais pas si c'est toujours le cas.

A plus !
henderson est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 22/03/2007, 23h18   #3 (permalink)
Invité de passage
 
Date d'inscription: février 2007
Messages: 2
Par défaut

bonsoir tout le monde
désolé pour le temps de r"ponse, mais j'ai eu des soucis avec mon FAI
bref, tout étant rentré dans l'ordre, j'en profite pour vous donner des nouvelles

je parviens donc maintenant a correctement compiler le programme (il manquait en fait des instructions au début du prog (cf fin du post))
j'obtiens donc maintenant l'affichage sur le portB du résultat (en binaire) du converteur analogique numerique, avec en entree la tension d'un potentiometre relié au portE0 (5V maxi)

Mais, à terme, je souhaite realiser un bargraph : il me faut donc mettre en mémoire dans le 68hc11 des niveaux de tension d'entrée pour lesquels il y aura x dels allumées sur le portB (les 8dels étant utilisées)

Etant novice en programmation, si quelqu'un a la moindre idée pour me permettre d'avancer dans mon projet, je lui en serait très reconnaissant

merci d'avance!

Code :
***PROGRAMME BARGHAPH.bas***
 
ProgramPointer	$0000
DataPointer	$00D0
StackPointer	$00E8
 
	sect	text
	cli			' autorisation du débogueur
	sect	data
 
 
 
byte PORTA	at $1000	'adresses des registres du HC11
byte PIOC	at $1002
byte PORTC	at $1003
byte PORTB	at $1004
byte PORTCL	at $1005
byte DDRC	at $1007
byte PORTD	at $1008
byte DDRD	at $1009
byte PORTE	at $100A
byte TMSK2	at $1024
byte TFLG2	at $1025
byte PACTL	at $1026
byte PACNT	at $1027
byte BAUD	at $102B
byte SCCR1	at $102C
byte SCCR2	at $102D
byte SCSR	at $102E
byte SCDR	at $102F
byte ADCTL	at $1030
byte ADR	at $1031
byte OPTIONS	at $1039
 
 
portb	equ	$04
adctl	equ	$30
adr1	equ	$31
adr2	equ	$32
optio	equ	$39
 
	org	$0				'fait débuter le programme à l'adresse 0
start	ldx	#$1000				'charger X avec $1000
	bset	optio,x %10000000		'positionne à 1 le premier bit de optio
	bsr	tempo				'aller au sous progrmme tempo
	ldaa	#%00100000			'charger A avec la valeur %00100000
	staa	adctl,x				'placer la valeur de A dans adctl
atten	brset	adctl,x %10000000 acqui		'aller a l'étiquette acqui  la fin des 4 conversions
	bra	atten
acqui	ldaa	adr1,x
	staa	portb,x
	bsr	tempo
	jmp	acqui
 
tempo	ldy	#$ffff
decy	dey
	bne	decy

Dernière modification par Juju_41 ; 28/03/2007 à 11h14. Motif: balise code
synapsus62 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/03/2007, 14h24   #4 (permalink)
Membre Expert
 
Date d'inscription: juin 2002
Messages: 1 296
Par défaut

Salut !

N'est-il pas possible d'utiliser l'un des TOC du HC11 pour réaliser à la fois le delai et la capture via sa routine d'interruption ?

Sinon pour les LEDs, on peut par exemple rechercher le premier bit à 1 et afficher de ce fait par palliers de 6db :

Code :
 
            Leds <- %10000000   ; un seul état dans le barillet (une seule LED alumée)
	    Count <- 8          ; huit tests utiles (peut-être 9 pour purger si aucune led allumée ???)
	    ldaa Valeur		; celle que l'on va afficher
	    clc		        ; sans doute inutile ici... sauf si on fait 9 itérations
Convert     rola		; Carry = bit 7
            bcs	Done 	        ; si 1 alors on tient un palier par 6 db
	    dec Count	        ; dernier coup ?
            beq Done	        ; si oui, c'est terminé
            lsr Leds	        ; décalage du barillet
	    bra Convert	        ; on recommence
Done	    ...                 ; Leds contient l'état des leds
A vérifier quand même...

On peut aussi traiter avec:

Code :
Leds <- %11111111   ; barillet rempli
Cela permet d'avoir les leds allumées façon bargraph, de la première à la nième en fonction du niveau (toujours en db).

En fonction de la logique de commande des leds on peut appliquer un XOR (EOR).

Par ailleurs, pourquoi ne pas encoder pour piloter deux ou trois afficheurs 7 segments ?
Ca ne devrait pas être difficile de convertir un byte en 3 digits à l'aide d'une petite table de 10 octets (ou 11 si on fait du ripple blanking) pour l'état des segments ?
Ca existe peut-être tout fait (3 digits + décodage + tout le reste)... ou carrément un LCD 1*16 ?

A plus !
henderson est actuellement connecté   Envoyer un message privé Réponse avec citation
NEWS VISUAL BASIC 6FAQs VBTUTORIELS VBOUTILS VBSOURCES VBLIVRES VBWIKI

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Basic



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 16h16.


Vos questions techniques : forum d'entraide Visual Basic 6 - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.