|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: février 2007
Messages: 2
|
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 |
|
|
|
|
|
#2 (permalink) |
|
Membre Expert
![]() Date d'inscription: juin 2002
Messages: 1 296
|
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 ! |
|
|
|
|
|
#3 (permalink) |
|
Invité de passage
![]() Date d'inscription: février 2007
Messages: 2
|
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 |
|
|
|
|
|
#4 (permalink) |
|
Membre Expert
![]() Date d'inscription: juin 2002
Messages: 1 296
|
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
On peut aussi traiter avec: Code :
Leds <- %11111111 ; barillet rempli
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 ! |
|
|
|
|
|
![]() |
||
Programmation MC 68HC11 PortE Potentiomètre
|
||
| Outils de la discussion | |
|
|