original 0 27/10/2019
rev. 24/07/2021
Description
Carte à but universel, pour TESTS divers sur PIC18F,
Correctif Circuit
imprimé rev 1
Test
sur BASE PIC18F (en PDIP
28 pins)
Test PWM 10 Bits sortie
sur RC2
Test 2 commandes
Servo Moteurs (21/04/2020)
Test Mini_OLED 20x10mm 128x32 I2C1 Hw MikroC (02/2021)
Test Mini_OLED 0,96" 25x16mm 128x64 I2C1
Hw MikroC (03/2021)
Carte à
but universel, pour TESTS divers pour serie PIC18F
en PDIP28,
validation de bout de codes ou fonctions ...
Validée pour PIC18F26K22, et pour le PIC18F
27K42 ..
Version Originale (Rev.0):
Presque toutes les PINS sont sur des Picots males ( sauf RA6 RA7 pour le quartz)
Picots males dispos sur POWER +Vcc et Gnd .
4 pins pour bus I2C1 SCL et 4 pins pour bus I2C1 SDA, avec leur R de pull up=2,7K
1 Led + pull up connectée sur RA4
2 leds à disposition : 1 jaune et 1 verte avec pull up.
Entree RA0 pour capteur Analogique genre LM35DZ ou OWS tel que DS18B20 via 3 pins 0V,+V,signal
Entree RA1pour capteur Analogique genre LM35DZ ou OWS tel que DS18B20 via 3 pins 0V,+V,signal
Attention : enlever R9 ou R10 si on veut utiliser l'entrée pour un signal Analogique externe.
RA5 I/O disposur pin male.
Optionnel : Le PIC peut etre utilisé, soit avec le Quartz installé ou en mode FOSC interne .
Liaison fiable avec UART Terminal à 115200bds !
Port B disponible ( enlever les strap ICSP Data et Clck) ou utiliser un double swicth
RC0, RC1,RC2,RC5 I/O dispos sur pins males (Ex pour liaison SPI MAX7219 ou LCD touch screen)
3 modes d'alimentation possible :
* par une alim Externe 3.6 à 5V , reliée au bornier (+ sur borne du bas !)
* par le 5V USB , si on connecte un cordon TTL/USB Prolific sur les 4 pins UART1 (dont le 0V et +5V)
* par le VDD du Pickit 2 ( ou 3) , si pas de perippheriques connectés par ailleurs (2 pins pres du connecteur ICSP, remplacé par un strap permanent)
* Part list from file: Base_18F26K22_191026.lay6" / 27/10/2019 09:08:30
Schemas :
Base pour 18FxxKxx..
Fichiers Gerbers ... rev 27/10/2019 pour cette carte : _Base_18F26K22_gerber_20191026.zip
Correctifs Circuit Imprimé :
Mise à jour , après modifications mineures :
circuit imprimé rev1 : Base_18F26K22_191026.lay6
correctifs sur alignements de certains éléments sur la grille de 2.54mm)
Pins Reset remplacées par BP, Pins cavaliers ICSP remplacé par microswitch....etc
Fichiers Gerbers pour cette carte : _Base_18F26K22_gerber_20191026.zip
TESTs sur BASE 18F26K22
Projet mikroC: 18F26K22_Test_lib_LCD_I2C1_Uart1_PCF8754_Inp_1903.zip
Source : PIC18F26K22_Test_Lib_LCD_PCF8574_I2C1_et_PCF8754_Input_190312.c
PIC18F26K22_Test_Lib_LCD_PCF8574_I2C1_et_PCF8754_Input_190312.c
utilise le Q=8MHz x PLL => 32MHz
LCD 4x20 I2C + test 2em PCF8574 si present sur le bus I2C !
Init UART1 19200,8,N,1
Init I2C1 Hardware 400KHz
Init LCD 4x20 avec interface PCF8574-1
detection des 2 PCF8574
usage en lecture, du PCF8574-2 , si present sur le bus I2C.
Affichage sur LCD
voir aussi , Applications utilisant cette base :
Test_LCD_I2C_PIC18F26k22.htm#Lecture_PCF8574
Horloges_4Matrices_Anneau60/Horloge_4Matrice8x8_Anneau60leds_18F26K22.htm
Test_Nokia5510_6x14car_PIC18F26k22.htm#Version_MikroC
Test PWM 10 bits
sortie sur pin C2 , pour commander la gate d'un MOSFET CANAL N IRLZ14 ( faible VGS)
avec en serie une R de 100 ohms
La charge est constituee d'une Ampoule voiture 12V 25W.
L'alimentation 12V provient d'une batterie 12V 7AH.
Le PIC est alimenté par la liaison USB pour l'UART ( Cordon Prolific)
Le programme lit l'entre anan RA1 ... future mesure de courant
et envoye une consigne PWM issue du clavier terminal
Option de compilation : Cde via terminal ou via ADC value.
Commande clavier Cxxxx avec xxxx pouvant varier de 0 à 1023 ( commande en 10 bits !) definie la valeur de IRatio ( PWM value)
Une commande annexe "RAMPE" emet une rampe de 0 à 1023 par pas de 64 ,puis retour à zero,
et retour à la precedente valeur IRatio.
IRatio de 0 à1023 pour 0 à 100%.
Nota : Le MOSFET est monté sur un radiateur en U de ~20 cm2 !
MCU : 18F26K22
Power supply: 5V
Directory : C:\_MikroC\_MesProjets_MikroC\_18F26K22_PWM_10b_8b
Projet : 18F26k22_UART1_RX_IT_ADC0_PWM1_10bits_Base_1903.mcppi
Source : _18F26K22_16Mhz_Uart1_ADC_PWM_10b_190314.c
CONFIG : P18F26K22_FOSC_interne_16Mhz.cfgsch
FOSC : 16MHz
Clock initiale in Khz = 16000
Init PWM1 10bits at 1000Hz on RC2
Mesure # 0 => ADC RA1 = 1023 soit 03FF
Mesure # 1 => ADC RA1 = 1023 soit 03FF
Mesure # 15 => ADC RA1 = 1023 soit 03FF
Mesure # 16 => ADC RA1 = 1023 soit 03FF
Recept UART1= RAMPE
Mesure # 17 => ADC RA1 = 1023 soit 03FF
Mesure # 900 => ADC RA1 = 1023 soit 03FFM
Mesure # 901 => ADC RA1 = 1023 soit 03FF
Recept UART1= C800
New IRatio= 800
Mesure # 4 => ADC RA1 = 1023 soit 03FF
Mesure # 24 => ADC RA1 = 1023 soit 03FF
Recept UART1= C1023
New IRatio= 1023
Mesure # 5 => ADC RA1 = 1023 soit 03FF
J'attends un INA921 pour rajouter la mesure de courant ...
car l'ACS712 gamme 5A n'est pas assez precis ...
Projet MikroC : _18F26K22_PWM_10b_2019.zip
Source : _18F26K22_16Mhz_Uart1_ADC_PWM_10b_190314.c
Test Commandes de 2 servo-moteurs via 3 timers
Scenario :
1) un 1er timer pour gerer le timming necessaire de 20mS correspondant à la repetition des commandes (20mS)
Ce premier timer gere les departs de 2 autres timers , pour 2 servomoteurs
donc tout est quasiment fait dans cette interruption
le choix premier avec Timer2 ne convient pas avec FOSC=16MHz , vu que Timer2 est sur 8 bits et je ne voulais pas
rajouter un compteur de 1 à 2 avec 10ms pour Timer2.. d'ou le choix de Timer0 16 bits , calé sur 20mS
sur ce top depart,
On active la Sortie Servo1 =1 et on Arme let Départ du Timer1 avec une consigne de temps =Consigne1 =1000 à 2000µS
et de meme pour la sortie Servo2=1 , Armement et Depart du Timer3 avec une consigne de temps = Consigne2 = 1000 à 2000µS
Ensuite chaque Timer s'occupe de sa consigne, sur interruption temps écoulé
2) sur IT TIMER1 TMR1IF ==1 => sortie servo1=0 et arret TMR1ON=0
3) sur IT TIMER3 TMR3IF==1 => sortie servo2=0 et arret TMR3ON=0
Les Timer 1 et 3 sont initialisé à 1mS at 16MHz , ce qui correspond à une valeur initiale de timer de 61536
il faut donc 4000 cycles pour ecouler 1000µS, d'ou ce raport de 4 à conserver pour la suite
Le programme :
Gestion interruption des 3 timers , TMR0,TMR1,TMR2 + gestion interruption RX UART
pour permettre la saisie directe d'une consigne via le clavier terminal (sur UART1)
via la commande CONS1=xxxx<CR> ou CONS2=xxxx<CR> avec xxxx pouvant varier entre 1000 à 2000 (µS)
Deux Potars , alimentés par Vcc, connectées sur RA0 (EA0) et RA1(EA1) peuvent etre utilisés, en envoyant
une commande clavier POTAR=1<CR> ou inhibe via POTAR=0<CR>
La mise à l'echelle des mesures analogique 10 bits 0 à1023 est traitée comme suit :
* limitation à 1000 (au lieu de 1023 naturel)
* rajout offset de 1000 , pour parcourir 1000 à 2000
* multiplié par 4 ( mise à l"echelle pour timer)
* envoi du complement à 65535
Ex: Consigne1= 65535- ((EA0+1000)<<2)
nota : ConsigneX avec unsigned integer (16bits)
HARDWARE :
Utilisation de ma carte de BASE 18F PDIP ...
Sortie pour Servo1 = RB1
Sortie pour Servo2 = RB2
sortie RB3 utilisée pour declencher / synchroniser la capture des signaux sur mon analyser IKALOGIC SQA50
RA0 = EA0 potar 1
RA1 = EA1 potar 2
et RC6 ,RC7 pour UART1 <--> cordon >Prolific <-> Terminal PC YAT
nota: pas de quartz utilisé ici pour FOSC, interne=16MHz
Mesures sur Analyser Ikalogic SQA50 :
Bien sur , les 2 commandes sont independantes, tout mixage de valeurs est possible
Resultat sur terminal :
Directory: C:_MikroC_MesProjets_MikroC\_18F26K22_Cde_2_Servo_Moteurs
Projet : Base_18F26K22_UART1_2_Servo_Moteur_2020_04_21.mcppi
Alim. = 5V
Config : P18F26K22_FOSC_interne_16Mhz.cfgsch
FOSC interne 16MHz
Port Hard UART1 19200,N,8,1 (RC6=TX RC7=RX)
Init RA0,1 as Analog Input
Source : Base_18F26K22_UART1_2xADC_2xServo_moteur_Timer_1_2_3_2020_04_21.c
Consignes initialisée au demarrage Consigne1=1mS, Consigne2 = 1,5mS
j= 00000 EA0= 00008 Consigne1=61535 EA1= 01000 Consigne2=59535
Software :
Projet MikroC : _18F26K22_Cde_2_Servo_Moteurs_20200421.zip
Chargeur : Base_18F26K22_UART1_2_Servo_Moteur_2020_04_21.hex
source : Base_18F26K22_UART1_2xADC_2xServo_moteur_Timer_1_2_3_2020_04_21.c