Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Projet "superviseur de charge" pour batteries
Bonjour Paulfjujo,
Tout à fait
4 batteries maximum pour commencer, et je parle de batteries 12V au plomb ou gel, de capacité de quelques 10ènes d'Ah à plus de 100Ah.
Ce n'est pas prévu, il n'y a pas autant de risque que pour du Li-Ion, LifePo4 etc
Pas encore, j'ai juste gribouillé un petit schéma de principe.
Je ne sais pas si ça existe pour les batteries 12V, je ne connaissais pas, c'est intéressant comme composant ! À voir...
L'idée est de maintenir chargées en permanence 4 batteries 12V en série qui alimentent un gros onduleur 230V.
Aujourd'hui on trouve des chargeurs avec la fonction 'maintien de charge", mais le soucis étant qu'il en faut un par batterie.
Avec ce superviseur de charge, j'espère maintenir chargées les 4 batteries avec un seul chargeur (du commerce).
paulfjujo a écrit :Source du message je suppose que c'est pour interfacer les 4 signaux
3 entrées Clock ,Data, et CS et 1 sortie DOut ...pour chacun des ADC 10bits SPI MCP3002
Tout à fait
paulfjujo a écrit :Source du message combien (maxima possible) de cellules envisages tu de mettre en série ?
cellule Li-ion ?
de 4.1V,au max de charge ?
capacité en maH ou AH ?
d'ou Maxi Intensité ?
4 batteries maximum pour commencer, et je parle de batteries 12V au plomb ou gel, de capacité de quelques 10ènes d'Ah à plus de 100Ah.
paulfjujo a écrit :Source du message mesure de temperature sur chaque cellule ?
Ce n'est pas prévu, il n'y a pas autant de risque que pour du Li-Ion, LifePo4 etc
paulfjujo a écrit :Source du message as-tu deja preparé un schema ?
Pas encore, j'ai juste gribouillé un petit schéma de principe.
paulfjujo a écrit :Source du message Est-ce qu'un circuit specialisé serait plus approprié ?
Je ne sais pas si ça existe pour les batteries 12V, je ne connaissais pas, c'est intéressant comme composant ! À voir...
L'idée est de maintenir chargées en permanence 4 batteries 12V en série qui alimentent un gros onduleur 230V.
Aujourd'hui on trouve des chargeurs avec la fonction 'maintien de charge", mais le soucis étant qu'il en faut un par batterie.
Avec ce superviseur de charge, j'espère maintenir chargées les 4 batteries avec un seul chargeur (du commerce).
Projet "superviseur de charge" pour batteries
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
OK, pas besoin de mesure de temperature pour des batteries au plomb ..
Mais Quid des mesures de courant ?
j'ai pas mal travaillé sur unprojet d'arrosage de plantes autonome: al imentation par panneau solaire + batterie 12V 7AH
avec possibilité aussi, de recharger la batterie via secteur ..
management du courant (valeur et sens du courant) et des tensions batterie ,et Panneau solaire
..reglage du courant par PWM
et suivi de l'evolution tension
et bien sur la periodicité et duree arrosage ..
projet en stand by actuellement.. sur ces points bloquants ..
capteur d'humidité dans la terre .. trop peu fiable => remplacé par DHT11 (dans le feuillage !)
electrovanne fonctionnant à pression tres faible , voir nulle .
une piste : elevation de la sortie tuyau au dessus du niveau cuve ou vanne motorisée ..
j'ai installé entre-temps une cuve de 350L recup eau de pluie .. ce qui va bientot me forcer à relancer mon projet
comme capteur de courant : ACS712 (effet hall) sortie analogique .. avec un zero flottant à U alim / 2
remplacé ensuite par un capteur INA219 (shunt + ADC numérique)
bien plus fiable et precis, mesure coté High Side .. avec mesure aussi de la tension !
Mais Quid des mesures de courant ?
j'ai pas mal travaillé sur unprojet d'arrosage de plantes autonome: al imentation par panneau solaire + batterie 12V 7AH
avec possibilité aussi, de recharger la batterie via secteur ..
management du courant (valeur et sens du courant) et des tensions batterie ,et Panneau solaire
..reglage du courant par PWM
et suivi de l'evolution tension
et bien sur la periodicité et duree arrosage ..
projet en stand by actuellement.. sur ces points bloquants ..
capteur d'humidité dans la terre .. trop peu fiable => remplacé par DHT11 (dans le feuillage !)
electrovanne fonctionnant à pression tres faible , voir nulle .
une piste : elevation de la sortie tuyau au dessus du niveau cuve ou vanne motorisée ..
j'ai installé entre-temps une cuve de 350L recup eau de pluie .. ce qui va bientot me forcer à relancer mon projet
comme capteur de courant : ACS712 (effet hall) sortie analogique .. avec un zero flottant à U alim / 2
remplacé ensuite par un capteur INA219 (shunt + ADC numérique)
bien plus fiable et precis, mesure coté High Side .. avec mesure aussi de la tension !
Projet "superviseur de charge" pour 4 batteries 12V
paulfjujo a écrit :Source du message Mais Quid des mesures de courant ?
Je n'ai pas prévu de faire de mesure de courant pour l'instant.
Une simple mesure de tension me semble suffisante pour contrôler l'auto-décharge.
Mais puisque je n'utilise qu'un chargeur pour 4 batteries, il serait assez facile de placer un shunt en sortie de celui ci.
Intéressant ton projet aussi !
Projet "superviseur de charge" pour 4 batteries 12V
Bonsoir,
J'arrive maintenant à afficher des chaines de caractères contenues dans un tableau "Menus", avec leurs paramètres associés dans un second tableau.
Les paramètres sont :
- choix de la taille des caractères 7px ou 10px
- surbrillance ou non
- numéro de page (ligne)
- décalage pour centrer le texte
J'arrive aussi à afficher une valeur contenue dans une variable.
Je vous joins le projet si vous voulez jeter un oeil au code.
Les 5 fichiers sur lesquels j'ai travaillé sont :
- main.c
- Oled_SSD1306.c
- interrupt_manager.c
- Fonts.h
- Menus.h
Bonne fin d'année à tous !
https://www.youtube.com/watch?v=unMmVyJ_egs
J'arrive maintenant à afficher des chaines de caractères contenues dans un tableau "Menus", avec leurs paramètres associés dans un second tableau.
Les paramètres sont :
- choix de la taille des caractères 7px ou 10px
- surbrillance ou non
- numéro de page (ligne)
- décalage pour centrer le texte
J'arrive aussi à afficher une valeur contenue dans une variable.
Je vous joins le projet si vous voulez jeter un oeil au code.
Les 5 fichiers sur lesquels j'ai travaillé sont :
- main.c
- Oled_SSD1306.c
- interrupt_manager.c
- Fonts.h
- Menus.h
Bonne fin d'année à tous !
https://www.youtube.com/watch?v=unMmVyJ_egs
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Projet "superviseur de charge" pour 4 batteries 12V
Bonjour à tous,
J'essaye de reprendre ce projet qui me tient à cœur.
J'ai passé quelques soirées pour faire un menu de réglage de la luminosité, et maintenant j'aimerais communiquer en SPI avec mon MCP3002.
Le soucis, je n'arrive même pas à générer l'horloge SCK (broche RC1).
À l'oscilloscope je ne vois pas de signal carré, j'ai soit un 0V soit un 5V en fonction de la config du bit CKP du registre SPI1CON1. Ce qui me laisse penser que déjà, ma
J'essaye de reprendre ce projet qui me tient à cœur.
J'ai passé quelques soirées pour faire un menu de réglage de la luminosité, et maintenant j'aimerais communiquer en SPI avec mon MCP3002.
Le soucis, je n'arrive même pas à générer l'horloge SCK (broche RC1).
À l'oscilloscope je ne vois pas de signal carré, j'ai soit un 0V soit un 5V en fonction de la config du bit CKP du registre SPI1CON1. Ce qui me laisse penser que déjà, ma
Projet "superviseur de charge" pour 4 batteries 12V
Bonjour à tous,
J'essaye de reprendre ce projet qui me tient à cœur.
J'ai passé quelques soirées pour faire un menu de réglage de la luminosité, et maintenant j'aimerais communiquer en SPI avec mon MCP3002.
Le soucis, je n'arrive même pas à générer l'horloge SCK (broche RC1).
À l'oscilloscope je ne vois pas de signal carré, j'ai soit un 0V soit un 5V en fonction de la config du bit CKP du registre SPI1CON1. Ce qui me laisse penser que déjà, ma
J'essaye de reprendre ce projet qui me tient à cœur.
J'ai passé quelques soirées pour faire un menu de réglage de la luminosité, et maintenant j'aimerais communiquer en SPI avec mon MCP3002.
Le soucis, je n'arrive même pas à générer l'horloge SCK (broche RC1).
À l'oscilloscope je ne vois pas de signal carré, j'ai soit un 0V soit un 5V en fonction de la config du bit CKP du registre SPI1CON1. Ce qui me laisse penser que déjà, ma
Projet "superviseur de charge" pour 4 batteries 12V
Bonjour à tous,
J'essaye de reprendre ce projet qui me tient à cœur.
J'ai passé quelques soirées pour faire un menu de réglage de la luminosité, et maintenant j'aimerais communiquer en SPI avec mon MCP3002.
Le soucis, je n'arrive même pas à générer le signal d'horloge SCK (broche RC1). J'ai essayé avec plusieurs source dans le registre SPI1CLK, sans succès.
À l'oscilloscope je ne vois pas de signal carré, j'ai soit un 0V soit un 5V en fonction de la config du bit CKP du registre SPI1CON1. Ce qui me laisse penser que déjà, ma broche RC1 est correctement assignée.
Mon init ressemble à ça :
Merci pour votre aide
J'essaye de reprendre ce projet qui me tient à cœur.
J'ai passé quelques soirées pour faire un menu de réglage de la luminosité, et maintenant j'aimerais communiquer en SPI avec mon MCP3002.
Le soucis, je n'arrive même pas à générer le signal d'horloge SCK (broche RC1). J'ai essayé avec plusieurs source dans le registre SPI1CLK, sans succès.
À l'oscilloscope je ne vois pas de signal carré, j'ai soit un 0V soit un 5V en fonction de la config du bit CKP du registre SPI1CON1. Ce qui me laisse penser que déjà, ma broche RC1 est correctement assignée.
Mon init ressemble à ça :
Code : Tout sélectionner
#include "mcc_generated_files/mcc.h"
#include <xc.h>
//--------------------------------------------------------------------------------------------
void init_SPI (void)
//--------------------------------------------------------------------------------------------
{
TRISCbits.TRISC0 = 0; //RC0 output //Din MCP3002
TRISCbits.TRISC1 = 0; //RC1 output //CLK MCP3002
TRISCbits.TRISC2 = 0; //RC2 output //CS MCP3002
TRISCbits.TRISC6 = 1; //RC6 input //Dout MCP3002
WPUC = 0b01011111; //RC6 / RC2 / RC1 / RC0 pull-up (+ RC3 et RC4 pour garder la config I2C)
ODCONC = 0b01011111; //RC6 / RC2 / RC1 / RC0 open drain (+ RC3 et RC4 pour garder la config I2C)
//Remap des pin
RC0PPS = 0b00011111; //RC0 en SDO (voir PPS OUTPUT REGISTER DETAILS p.282)
RC6PPS = 0b00010100; //RC6 en SDI (voir PPS INPUT REGISTER DETAILS p.280)
RC1PPS = 0b00011110; //RC1 en SCK (voir PPS OUTPUT REGISTER DETAILS p.282)
RC2PPS = 0b00100000; //RC2 en SS (voir PPS OUTPUT REGISTER DETAILS p.282)
SPI1CON0 = 0b00000011; //SPI CONFIGURATION REGISTER 0 p.539
SPI1CON1 = 0b11100111; //SPI CONFIGURATION REGISTER 1 p.540
SPI1CON2 = 0b00000100; //SPI CONFIGURATION REGISTER 2 p.541
SPI1CLK = 0b00000010; //config horloge en MFINTOSC (SPI CLOCK SELECTION REGISTER p.543)
SPI1INTE = 0x00; //SPI INTERRUPT ENABLE REGISTER p.536
SPI1INTF = 0x00; //SPI INTERRUPT FLAG REGISTER p.535
SPI1BAUD = 0x00; //SPI BAUD RATE REGISTER p.539
SPI1TWIDTH = 0x00; //SPI TRANSFER WIDTH REGISTER p.538
SPI1STATUS = 0x00; //SPI STATUS REGISTER p.542
SPI1TCNTH = 0x00; //SPI TRANSFER COUNTER MSB REGISTER p.538
SPI1TCNTL = 0x00; //SPI TRANSFER COUNTER LSB REGISTER p.537
SPI1TXB = 0x00; //SPI TRANSMIT BUFFER REGISTER p.543
SPI1RXB = 0x00; //SPI READ BUFFER REGISTER p.542
SPI1CON0bits.EN = 1; //active le module SPI, (faire la config avant)
}
Merci pour votre aide
[PIC18F27K42] Projet "superviseur de charge" pour 4 batteries 12V
Bonjour djviper16,
Les inputs PPS se programment différemment des outputs. Au lieu de faire Pin = Fonction, on fait Fonction = Pin, cela permet de mettre plusieurs fonctions input sur une même pin, et une fonction output peut sortir sur plusieurs pins différentes.
Voir page 278 la sélection de la pin input PPS dans les registres xxxPPS.
SPI1SDIPPS = 0b00010110 (RC6 en SDI voir PPS INPUT REGISTER DETAILS p.278 et 280)
Il y a sans doute d'autres problèmes car le port SPI devrait quand même démarrer.
Les pins qui fonctionnent en analogique et numérique démarrent en mode analogique, voir le registre ANSELC.
Pourquoi activer pull-up et open drain sur les pins SPI ?
Les inputs PPS se programment différemment des outputs. Au lieu de faire Pin = Fonction, on fait Fonction = Pin, cela permet de mettre plusieurs fonctions input sur une même pin, et une fonction output peut sortir sur plusieurs pins différentes.
Voir page 278 la sélection de la pin input PPS dans les registres xxxPPS.
SPI1SDIPPS = 0b00010110 (RC6 en SDI voir PPS INPUT REGISTER DETAILS p.278 et 280)
Il y a sans doute d'autres problèmes car le port SPI devrait quand même démarrer.
Les pins qui fonctionnent en analogique et numérique démarrent en mode analogique, voir le registre ANSELC.
Pourquoi activer pull-up et open drain sur les pins SPI ?
[PIC18F27K42] Projet "superviseur de charge" pour 4 batteries 12V
Bonjour Satinas,
Merci, j'ai modifié mon init suite à tes remarques pertinentes, mais c'est pas beaucoup mieux. J'ai 1V sur RC1 et pareil sur RC0, toujours pas de clock, je pige pas.
J'ai essayé des choses, rajouté la séquence PPSLOCK, tripatouillé les registres de config mais rien n'y fait.
J'ai mis des pull-up car je souhaite travailler sur le 0 logique, et les open drain pour correspondre à ce que je fais dans l'init de l'I2C. Sachant que l'I2C ne fonctionne pas si je ne mets pas les broches en open drain.
L'init du spi modifiée (ne fonctionne toujours pas) :
L'init de l'I2C (qui fonctionne avec mon écran oled) :
Merci, j'ai modifié mon init suite à tes remarques pertinentes, mais c'est pas beaucoup mieux. J'ai 1V sur RC1 et pareil sur RC0, toujours pas de clock, je pige pas.
J'ai essayé des choses, rajouté la séquence PPSLOCK, tripatouillé les registres de config mais rien n'y fait.
J'ai mis des pull-up car je souhaite travailler sur le 0 logique, et les open drain pour correspondre à ce que je fais dans l'init de l'I2C. Sachant que l'I2C ne fonctionne pas si je ne mets pas les broches en open drain.
L'init du spi modifiée (ne fonctionne toujours pas) :
Code : Tout sélectionner
#include "mcc_generated_files/mcc.h"
#include <xc.h>
//--------------------------------------------------------------------------------------------
void init_SPI (void)
//--------------------------------------------------------------------------------------------
{
ANSELC = 0x00; //PortC en numérique
TRISCbits.TRISC0 = 0; //RC0 output //Din MCP3002
TRISCbits.TRISC1 = 0; //RC1 output //CLK MCP3002
TRISCbits.TRISC2 = 0; //RC2 output //CS MCP3002
TRISCbits.TRISC6 = 1; //RC6 input //Dout MCP3002
WPUC = 0b01011111; //RC6 / RC2 / RC1 / RC0 pull-up (+ RC3 et RC4 pour garder la config I2C)
ODCONC = 0b01011111; //RC6 / RC2 / RC1 / RC0 open drain (+ RC3 et RC4 pour garder la config I2C)
/////////////Remap des pin////////////
PPSLOCK = 0x55; //special sequence
PPSLOCK = 0xAA;
PPSLOCK = 0b00000000; // PPS selections can be changed
RC0PPS = 0b00011111; //SDO sort en RC0 (voir PPS OUTPUT REGISTER DETAILS p.282 et p.278)
RC1PPS = 0b00011110; //SCK sort en RC1 (voir PPS OUTPUT REGISTER DETAILS p.282 et p.278)
RC2PPS = 0b00100000; //SS sort en RC2 (voir PPS OUTPUT REGISTER DETAILS p.282 et p.278)
SPI1SDIPPS = 0b00010110; //SDI rentre en RC6 (PPS INPUT REGISTER DETAILS p.280 et p.278)
PPSLOCK = 0x55; //special sequence
PPSLOCK = 0xAA;
PPSLOCK = 0b00000001; // PPS is locked
////////////////////////////////////////
SPI1CON0bits.EN = 0; //desactive le module SPI
SPI1CLK = 0x00; //config horloge en FOSC (SPI CLOCK SELECTION REGISTER p.543)
SPI1BAUD = 0xFF; //64Mhz/(2x256) = 125KHz (SPI BAUD RATE REGISTER p.539)
SPI1TWIDTH = 0x00; //8bits (SPI TRANSFER WIDTH REGISTER p.538)
SPI1INTE = 0x00; //SPI INTERRUPT ENABLE REGISTER p.536
SPI1INTF = 0x00; //SPI INTERRUPT FLAG REGISTER p.535
SPI1CON0 = 0b00000011; //SPI CONFIGURATION REGISTER 0 p.539
SPI1CON1 = 0b11100111; //SPI CONFIGURATION REGISTER 1 p.540
SPI1CON2 = 0b00000100; //SPI CONFIGURATION REGISTER 2 p.541
SPI1CON0bits.EN = 1; //active le module SPI, (faire la config avant)
/*
SPI1STATUS = 0x00; //SPI STATUS REGISTER p.542
SPI1TCNTH = 0x00; //SPI TRANSFER COUNTER MSB REGISTER p.538
SPI1TCNTL = 0x00; //SPI TRANSFER COUNTER LSB REGISTER p.537
SPI1TXB = 0x00; //SPI TRANSMIT BUFFER REGISTER p.543
SPI1RXB = 0x00; //SPI READ BUFFER REGISTER p.542
*/
}
L'init de l'I2C (qui fonctionne avec mon écran oled) :
Code : Tout sélectionner
#include "mcc_generated_files/mcc.h"
#include <xc.h>
//--------------------------------------------------------------------------------------------
void init_I2C (void)
//--------------------------------------------------------------------------------------------
{
TRISCbits.TRISC3 = 0; //RC3 output
TRISCbits.TRISC4 = 0; //RC4 output
WPUC = 0x18; //RC3 & RC4 pull-up
ODCONC = 0x18; //RC3 & RC4 open drain
RC3PPS = 0x21; //scl -> C3
I2C1SCLPPS = 0x13; //scl <- C3
RC4PPS = 0x22; //sda -> C4
I2C1SDAPPS = 0x14; //sda <- C4
I2C1CON0 = 0x04; //I2C1 Control Register 0, Master mode, 7-bit address // doc p.577
I2C1CON1 = 0x80; //I2C1 Control Register 1, Acknowledge value transmitted after received data (when I2CCNT=0) : 1 = NACK (Not ACKnowledge) // doc p.579
I2C1CON2 = 0x00; //I2C1 Control Register 2, envoi Start non auto, SDAHT 300ns hold time, BFRET 8 i2c clock pulses // doc p.580
I2C1CLK = 0b00000011; //I2C1 Clock Selection Register, MFINTOSC 500kHz ?? 100kHz ?? // doc p. 581
I2C1ADB1 = 0x78; //adresse bus I2C SSD1306
I2C1CON0bits.EN = 1; //i2c1 on
}
[PIC18F27K42] Projet "superviseur de charge" pour 4 batteries 12V
L'open drain est obligatoire en mode I2C, pour le SPI c'est suicidaire, les pins output ne pourront pas sortir du Vdd car c'est un circuit ouvert.
Tu enlèves le pull-up et l'open drain, tu vérifies que cela démarre, ensuite tu peux mettre un pull-up sur SDI, ensuite tu remets l'open drain et cela marchera plus :)
Tu enlèves le pull-up et l'open drain, tu vérifies que cela démarre, ensuite tu peux mettre un pull-up sur SDI, ensuite tu remets l'open drain et cela marchera plus :)
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 44 invités