31 jan 2011
31/12/2017 rev 6.1
Commande
Guirlande de 20 leds avec PIC 12F683 , reglage rampe via
BlueTooth ( Interrupt sur RX ) MC
Connection
Pickit2 sur le PIC 12F683
Test#1 Mesures
Analogiques et UART RS232 (MC)
Test#2 4 voies
Analogiques 17 bits en I2C (MC)
Test#3
Pilotage sortie PWM via consigne Analogique (MC)
Test#4 8E
& 8S via I2C + liaison Ethernet via XPORT sur UART + appli VB6
Test#5 cde
Afficheur LCD via 76164 en mode simili SPI 2 fils (ASM)
Test#6 Cde Afficheur
7 seg via 76164 en mode simili SPI 2 fils (ASM)
Non testé : PIC10F220
Cde Afficheur 7 seg via 76164 en mode simili SPI 2 fils (ASM)
Connection
Pickit2 sur le 12F683
Le chargeur 12F683_2Ana
L'eeprom du 12F683_2em.ihex et 12F683_2em.eed
(1) "ERASE"
(2) "BLANK CHECK"
(3) File Load " 12F683_2em.hex"
(4) verifier que "MCLR" est cochée
VDD=5,0V et "EEprom Data" cochée
(5) "WRITE"
(6) "VERIFY" ..doit passer en fond
Vert si OK
(7) relier la RS232 sur le
PC .. lancer le terminal VBray 9600,N,8,1 sur le bon port comx
"connecter"
(8) decocher "MCLR"
(9) cocher "On" pour alimenter le
montage via le Pickit2 (Attention pas d'autre ALIM exterieure!
sinon debrancher le pickit2)
PicKit2 est integré dans l'environnment MickroC via "outils".
EEprom Editor est utilisé pour initialiser le contenu de celle-ci,
stockage dans un fichier .ihex ou .eed
ne pas oublier de cocher la case "Use Eeprom in project".
Attention il est preferable d'installer
l'ensemble des programmes "Pickit2" dans le meme
directory que MikroC.
Le programmateur Pickit2 peut rester en place et alimenter le
montage, sans autre source exterieure
que la connection USB du Pickit2.
Avec un autre type de programmateur, il conviendra d'alimenter le
montage en 5V
et d'isoler le VDD+5V du pickit2 !
Evaluation du PIC12F683 ..appli en C
La docu Microchip Pic12F683_41211d.pdf
Commande
Guirlande Led
version 1:
Schema:
La Led verte represente la
commande de la Guirlande de 20 leds blanches dia 5mm
Problematique UART : Reception Traitée par Interruption :
Comme il n'y a pas d'UART Hardware sur ce PIC12F683
je propose une solution (parmi tant d'autres!), pour gerer un
UART Software à 9600 bauds
en émission , mais surtout en réception sur Interruption..
Pin GP0 est affecté en Reception , GP1 en Emission
Il n'y a pas de bit specific (RCIF) Interrupt RX dans ce PIC ,
c'est donc l'interrupt GPIO (pin RX) qui
servira de point d'entrée dans l'interruption traitant le signal
sur UART reception.
La principale difficulté est de bien caler le bit de START
J'ai utilisé mon analyser SQ50 pour celà, qui apporte une aide
non negligeable.
En mettant un bit de synchro pour visualiser le front de lecture
de chaque bit.
Bit de synchro Enlévé par la suite.
Le point de depart etant 9600 bds => 1 bit dure 104,1µS
la FOSC interne 8MHz du MCU est utilisée.
=> MCU à 8MHZ => 1 cycle en 4/8= 0,5µS
Fabrication d'une tempo en ASM : Bit_Delay de 102µS + appel et
retour => ~104µS
La duree de cette tempo est aisement mesurable , en se mettant en
mode debugger , pas à pas,
et utilisant la fenetre WATCH CLOCK, pour mesurer le nombre de
cycle et duree en µS.
Des l'apparition du front descendant arrivant sur RX UART =>
Interruption GPIO
Introduction d'une duree de 1/2 Bit (52µS) pour etre sur de
tester
tous les autres bits suivant , sur l'etat stable du bit .
rapel : la trame UART (format 8,N,1) comporte 10 moments
demarre avec un bit de start =0
puis les 8 bits de donnees avec LSB en tete ,
(sans Parité) et se termine avec un bit de STOP à 1
Le bit de stop est tronqué, car il faut tenir compte du temps
que met l'interruption
pour remettre le contexte original des registres MCU ,
sinon on ne pourrait pas suivre une reception contigue de bytes (sans
delai intercaractere).
Ce PIC a peu de RAM et ROM
et ici le buffer de reception nommé TEXTE n'a que 32 bytes de
profondeur
en prevision de l'usage de ADC posterieurement
(avec partie analogique ADC et affichage mesure ADC MCU plein à
99%)
Un HC06 BlueTooth connecté sur l'UART , au lieu d'un PC via un
cordon Prolic,
permet l'usage d'un terminal BlueTooth .
ex: BlueTerm sur Android
La transmission pouvant etre simultanée , sur PC et Via
BlueTooth
Pour la reception, on dot choisir , Of course..
La connectique ICSP est conservé via les Pins Males
la variable des tempo "Rs_tmp" est declaré absolue ,
pour etre sur de la trouver
sans interference avec le travail du compilateur .
Le detail de l'interruption
UART :
Le boitier Guirlande original:
![]() |
![]() |
Boitier original de comande des 20 leds (2,75 LIDL) | schema probable ... MCU sans marque |
Cette guirlande ne clignote pas.
Le CIRCUIT (MCU ?) original embarqué ne sert que pour la
fonction timer
Un interrupteur à glissiere à 3 Positions : ON .. TIMER ..OFF
En position TIMER , la guirlande doit s'Allumer pendant 6/24H
Position ON : alluméee en permanence... et OFF : Eteinte !
N'etant pas satisfait de ce fonctionnement, j'ai fait sauté le
circuit intégré , et avec un montage externe
utilise à la place un MCU PIC12F683 pour piloter le Transistor
de commande ,inclu sur le circuit imprimé original.
Je recupere aussi l'alim 4,5V .. apres le Switch , pour profiter
du Marche/arret
La sortie GP4 ( ou GP5) pilote le transistor de sortie, en
fonction du deroulement du programme inclus dans ce MCU.
Au depart , j'avais prevu un potar et une entree analogique pour
commander le fadding ON et Fadding OFF des 20 leds
Temps ajusté par la valeur ADC , position curseur du potar.
Pour des raisons d'encombrement, je suis passé à une commande
via l' UART, via un terminal BlueTooth Android
pour regler autrement le timming d'allumage et d'extinction des
leds ..de plus un mot de 32 bits, envoie une sequence (Pattern)
de 1 et de 0, assocciés à une table de differentes tempos pour
avoir des effets Lumineux ( genre SOS)
La Modif du Boitier , et
le module externe PIC12F683
![]() |
![]() |
Modif circuit imprimé | Montage PIC en externe |
![]() |
![]() |
Montage PigBack sur le boitier original | Le module relié |
La commande de rampe de montée ou descente (niveau de
luminosité)
du simili PWM à 50HZ ( periode=20mS) ,
Le pas temporel de la rampe, peut
etre modifié via la laison UART (0 à 255 mS)
L'evolution Leds ON ou OFF suivant une Pattern definie
dans le programme.
(Ce PIC n'a pas assez de ressources pour pouvoir modifier celle
ci via la liaison UART)
Pattern=0b01010101110111011101010100010101
;
Au final, je suis un peu deçu par
le choix de ce PIC, trop limité en RAM
un 12F1840 aurait été parfait.. avec un PWM Hardware et un UART
Hardware
mais comme il trainait depuis longtemps inutilisé...
L'application MikroC (version
1)
simili PWM
Projet complet : _12F683_Guirlande_Led_171218.zip
Source: _12F683_Guirlande_20_leds_PWM_UART1_171217.c
Version 2 : PWM Hardware
Mobilise GPIO2 (RA2) comme sortie CCP1 PWM_Out ,
donc remplace entree Ana RA2
La rampe d'eclairage et d'extinction se fait maintenant en PWM en
256 pas (0 à 255) , qui est beaucoup plus SMOOTH .
Projet complet : _12F683_Guirlande_2018.zip
Source: 12F683_Guirlande_PWM_UART_TX_GP1_RX_GP0_via_Interrupt_2018.c
Schema MAJ dans le Zip..
TEST #1
Mesures de 2 voies
Analogiques 10 bits et affichge sur terminal PC, via la RS232
Affichage message en EEPROM Pic
Pas de quartz, usage horloge interne du Pic.
schéma :
Rappel: GP0 et GP1 sont reliés au PC via l'interface
RS232 2T
Programme source :
Le projet defini dans
MickroC, permet de definir la config du PIC12F683 (ici : 0x00C4)
En particulier l'usage de l'oscillateur interne à 8MHz
, ce qui libere GP4 et GP5.
Master Clear internal permet de recupérer aussi
la pin GP3 ( MCLR) comme entree .
GP1 et GP2 sont mobilisés pour gerer la RS232
via l'interface RS232 ,
mais aussi pour la liaison au Pickit2 pour la programmation ICSP
Le programme source (en mikroC) de ce test: 12F683_2Ana
Sous MikroC, l'usage des
bibliotheques : SoftwUart, ADC, Cstring, Convertions, EEprom rend
tres facile
la programmation de ces fonctionalites... meme si cette appli ne
sert pas à grand chose ,
hormis de prendre en main et evaluer quelques possibilites du PIC12F683.
on doit voir apparaitre sur le terminal le
msg stocké en eeprom :
Version 09 janv 2011
PaulFjujo 12F683_2em.C
suivi des 2 mesures analogiques AN2 et AN3
VOLT AN2 GP1= 1023 VOLT AN3 GP4= 510
VOLT AN2 GP1= 1023 VOLT AN3 GP4= 510
VOLT AN2 GP1= 1023 VOLT AN3 GP4= 510
VOLT AN2 GP1= 1023 VOLT AN3 GP4= 510
si GP3=1 la led clignote toute les 500mS
si GP3=0 la led clignote au rithme de la tension delivree par le
potar sur l'entree analogique AN2
avec 0V sur AN2 delai = 75 à 100mS
avec 1023 points delai > 1100mS
sur le terminal Vbray on peut cocher la fonction "Time"
pour evaluer le timing d'acquisition variable si GP5=0
14:36:30.844> VOLT AN2
GP1= 1023 VOLT AN3 GP4= 510
14:36:31.945> VOLT AN2 GP1= 1023 VOLT AN3 GP4= 510
14:36:44.213> VOLT AN2 GP1= 430 VOLT AN3 GP4= 212
14:36:44.714> VOLT AN2 GP1= 426 VOLT AN3 GP4= 212
14:36:48.419> VOLT AN2 GP1= 0 VOLT AN3 GP4= 0
14:36:48.519> VOLT AN2 GP1= 0 VOLT AN3 GP4= 0
TEST #2
Affichage message en EEPROM Pic
Pas de quartz, usage horloge interne du Pic.
Mesures de 4 voies Analogiques 17 bits utiles et affichge sur
terminal PC, via la RS232
Usage de la liaison I2C ET Uart.
Nota: I2C softwareutilisé , car pas de module I2C Hardware dans
ce PIC
On atteint ici les limites de taille programme memoire Flash.
Le Schema
Le PrototypeLe programme source (en mikroC) de ce test: 12F683_ADC18b Usage des bibliotheques : SoftwUart, soft_I2C, Cstring, Convertions, EEprom Le Chargeur : 12F683_ADC18b Le Fichier Eeprom Pic 12F683_3em.ihex doc du convertisseur 18 bits , voir ICI Resultats obtenus: sur PC terminal Vbray nota: les entrees CH1,2,3 sont en l'air !
TEST #3
Mesure de la consigne
sur voie ANA 3 pour sortie sur GP2 en PWM et affichage sur
terminal PC, via la RS232
Programme source :
Version Soft_PWM
Source :CtrlPWMFan M05.c
Hardware: Entree ana2
sur pin5
Sortie PWM sur GP5
programme initialement prevu pour un 12F675 (sans fonction CCP)
Le Schema
Le Chargeur : CtrlPWMFan
M05.hex
La version adaptée au 12F683 (avec fonction CCP) :
Le source : Fan_PWM_control_12F683.c
Le chargeur : 12F683_Fan_Ctrl.hex
TEST #4
Liaison 12F683 <-> XPORT
CLIENT en VB6
Test 12F683
pilotant 8E et 8S d'un MCP23017 via un XPORT-03 et interface en
VB6
Le proto 12F683:
schema de test:
![]() |
Le programme coté 12F683: Le source : 12F683_MCP23017_Xport.c Le chargeur : 12F683_MCP23017_Xport.hex Le chargeur eeprom :12F683_MCP23017_Xport.ihex Dans tous les cas, le PIC12F683 est autonome, mais dans ce cas precis,il ne fait pas grand chose ormis la gestion I2C et la transmission en RS232, vu qu'on atteint les limites taille software dommage, pas assez de place pour gerer le MCP2304 4CH analog 17bits en I2C..! Used ROM (program words): 1952 (95%) Je pense qu'en asm 100% cela devrait rentrer! votre avis ? dans cet exmple , il n'y a pas de traitement specifique lié au x possibilités du MCP23017 tel que la gestion d'interruption sur changement d'etat. Astuce employée pour la reception : La fonction Soft_Uart_Read est bloquante ! Apparament (sauf erreur ou incomprehension de ma part), je ne peux pas utiliser le Timer0 peut etre à cause de la gestion Soft I2C , pour pouvoir utiliser Soft_Uart_Break J'ai donc relié la PIn RX à la broche GP3 pour generer une interruption sur changement d'etat et armer un drapeau pour signaler l'arrivée d'un octet sur le port serie Ce qui me permet de le capturer dans la foulée quand je suis dans une boucle de 32000 iterations servant de fenetre temporelle de capture. La reception Soft_uart_Read ne peut pas etre dans le traitement d'interruption: fonction non re-entrante Une tempo de ~500ms est rajouter pour avoir un envoi de trame toutes les secondes. à 9600 bauds A SUIVRE .... avec un 18F252 !Le programme coté PC: Commande des E/S par liaison ethernet directe (ou WIFI ou via le WEB) La trame emise par le PIC est envoyée sur le XPORT en niveau TTL le XPORT encapsule cette trame en Ethernet , le cable ethernet est relié à ma Freebox qui sert de serveur / routeur WEB. Le PC dispose d'une socket Client permettant de recuperer la trame emise par le PIC le programme d'aplication VB6, sert d'interface Homme Machine , recupere et affiche individuellement les infos et permet de renvoyer une commande pour les sorties. Il n'y a pas de controle CRC etc.. la trame IP ethernet le fait deja ! Toute commande emise pour activer les sorties est verifiée en retour par l'etat des latch du MCP23017 qui est comparé à la commande. Si le retour correspond la led verte est OK, sinon led rouge = discordance Il peut y avoir jusqu'à 10 essai d'envoi de commande (automatique !) Un gros pavé (ovale) rouge s'affiche en cas de probleme de communication: probleme detecté par la non progression du numero de trame (codé sur 8 bits , evoluant de 0 à 255 à chaque envi de trame (~toutes les secondes)
Client Xport executable seul Xport Client Installation Piege: attention le flux RS232 doit etre regulié pour ne pas etre decoupé ! Nota: la finalité est d'utiliser un interface en Java (applet) dans une page WEB. là je ne maitrise pas bien.. en cours..voir aussi ici XPORT_16F_18F/Pic_Xport.htmA SUIVRE .....
TEST #5 PIC 12F683 et Afficheur LCD 2x16 cars Cde en 2 fils via circuit 74xx164 MPlab 8.92 ASM 100% le schema :Le prototype :
Le Programme:
usage d'un PIC12F683 + LCD+ 74164 .. montage 2 fils
Tous les delays sont geres via le timer0.
La Pin GP4 est utilisée pour ressortir FOSC/4 .. pour bien
verifier la config FOSC interne .
Mesure :1MHz à l'oscillo ( FOSC interne = 4MHz => 4/4= 1 Mhz)
Affichage sur la 1ere ligne de "0123456789"
Affiche sur la2em ligne :
un compteur incrementé à chaque tour de boucle (0 à255)
puis la valeur 8bits de la voie analogique RA0 ( 0 a 255)
une etoile = separateur
et la valeur en Beaufort , en divisant la valeur brute par 28 ..
soit maxi 255/28=9
Une Led sur GP5 voit son etat inversé à chaque tour de boucle.
Tempo de boucle 1 sec
Le projet MPLAB ASM:
12F683_LCD_2w_74164.zip
La meme
application avec un PIC12F1840 (asm)
TEST #6
PIC 12F683 et Pilotage afficheur 7
segment
Cde en 2 fils afficheur 7
segments, via circuit 74xx164
MPlab 8.92 ASM 100%
le schema :
Projet parti uniquement du schema utilisant un MCU 8051
Simulation avec CMS60 du comportement 74LS164 + Afficheur Anode
commune
74LS164_test.ckt
puis definition codage 7 segment en EEPROM
avec une
particularité, detail à decouvrir
!
Le prototype :
Le Programme:
usage d'un PIC12F683 + 74LS164 + Afficheur .. Commande via 2 fils
!
Tous les delays sont geres via le timer0. (Tempo 5mS, 200mS et 1
sec
La Pin GP4 est utilisée pour ressortir FOSC/4 .. pour bien
verifier la config FOSC interne .
Compilation conditionnelle dans le source pour activer ou non un
test de défilement valeur 0 à 9 sur afficheur
La valeur ADC 8bits de la voie analogique RA0 ( 0 a 255) est
cumuléé 8 fois pour ensuite en faire la moyenne
Cette moyenne est divisée par 27 pour retomber sur une echelle
de 0 à 9 (valeur en Beaufort)
Le point decimal de l'afficheur est relié à GP5 , pour signaler
chaque tour de boucle.
Des resistances de
300 ohms ont été rajoutées sur chaque segment pour limiter le courant maxi.
Attention: Du fait que l'afficheur soit avec ANODE COMMUNE, il
faut un zero logique pour allumer un segment
Bien verifier aussi avec la datasheet de l'afficheur, la
correspondance : Pin afficheur et repere du segment
pour definir l'association necessaire Numero de digit -> nb de
segments allumés,
ce qui se traduit par la table de codage (situee en EEPROM) :
Le projet MPLAB ASM:
12F683_LCD_2w_74164.zip
testé OK en réel !
La meme
application avec un PIC12F1840 (asm)
PIC 10F220
La Meme Appli prévue pour
un PIC 10F220 .. mais non testée
Mini PIC , en format DIP6 ou DIP8 ..
16 bytes de RAM seulement !ADC sur 8 bits, Pas d'interruption...et
33 instructions
Pas d'EPROM, donc
avec recup codage 7 segments en FLASH
program..
Compilé OK...mais non testé en réel