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
[resolu] DS1307 (RTC) + LCD + PIC 16F877 A
Bonsoir,
Voilà je suis tomber sur votre code en recherchant le moyen de faire fonctionné / récupéré l'heure d'un DS 1307.
J'ai donc essayé d'adapter votre code a un microcontrolleur 16f877A et un ecran lcd. Malhereusement rien a faire pas moyen d'afficher la date et l'heure.
Voici un screen de ma simulation sous proteus :
La seule chose que j'ai du enlevé de votre code est :
Car sans doute non compatible avec mon pic.
Pensez vous que ça peut être la cause ?
Cordialement Venom
ps: je suis novice dans le domaine.
@++
Voilà je suis tomber sur votre code en recherchant le moyen de faire fonctionné / récupéré l'heure d'un DS 1307.
J'ai donc essayé d'adapter votre code a un microcontrolleur 16f877A et un ecran lcd. Malhereusement rien a faire pas moyen d'afficher la date et l'heure.
Voici un screen de ma simulation sous proteus :
La seule chose que j'ai du enlevé de votre code est :
Code : Tout sélectionner
ANSELA = 0; // Configure le PORTA en digital
ANSELB = 0; // Configure le PORTB en digital
ANSELC = 0; // Configure le PORTC en digital
SLRCON = 0; // ?? Configure all PORTS at the standard Slew Car sans doute non compatible avec mon pic.
Pensez vous que ça peut être la cause ?
Cordialement Venom
ps: je suis novice dans le domaine.
@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par venom le jeu. 14 avr. 2016 06:33, modifié 1 fois.
DS1307 (RTC) + LCD + PIC 16F877 A
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour venom,
Tout d'abord bienvenu sur FantasPic.
Je me suis permis de déplacer ton sujet pour le mettre dans la bonne catégorie. Il est préférable, afin d'avoir un maximum de réponse, de mettre le lien de la DS de son PIC, afin de faciliter le travail des personnes voulant t'aider.
Pour répondre à ta question, OUI cela peut être la cause, car si tes ports ne sont pas en digital, tu va avoir de belle surprise. Il faut trouvé la commande pour les mettre en digital sur ton PIC et sur ton compilateur?
Avec quel compilateur travail tu ?
As tu essayé d’afficher en premier du texte sur ton LCD ? Un tuto est en cours sur les LCD justement.
Peut tu poster TOUT ton code ?
Je repasse tout à l'heure pour creuser tout ça
A+
Tout d'abord bienvenu sur FantasPic.
Je me suis permis de déplacer ton sujet pour le mettre dans la bonne catégorie. Il est préférable, afin d'avoir un maximum de réponse, de mettre le lien de la DS de son PIC, afin de faciliter le travail des personnes voulant t'aider.
Pour répondre à ta question, OUI cela peut être la cause, car si tes ports ne sont pas en digital, tu va avoir de belle surprise. Il faut trouvé la commande pour les mettre en digital sur ton PIC et sur ton compilateur?
Avec quel compilateur travail tu ?
As tu essayé d’afficher en premier du texte sur ton LCD ? Un tuto est en cours sur les LCD justement.
Peut tu poster TOUT ton code ?
Je repasse tout à l'heure pour creuser tout ça
A+
DS1307 (RTC) + LCD + PIC 16F877 A
bonjour
Sur le schéma le rétroéclairage a la masse pas bon il faut passer par un potar.
Pour le soft quand on début en C on utilise les librairies fournies avec le compilateur, après si cela ne fonctionne,pas, problème initialisation du pic ou du LCD et de la liaison serie.
Pour les ports en digital je ne pense pas surtout sur le PORTB le digital ou analogique c'est sur le PORTA et PORTE, maintenant qu'il soit mal configure en entrée ou en sortie nous ramène a la configuration du pic
A+
Sur le schéma le rétroéclairage a la masse pas bon il faut passer par un potar.
Pour le soft quand on début en C on utilise les librairies fournies avec le compilateur, après si cela ne fonctionne,pas, problème initialisation du pic ou du LCD et de la liaison serie.
Pour les ports en digital je ne pense pas surtout sur le PORTB le digital ou analogique c'est sur le PORTA et PORTE, maintenant qu'il soit mal configure en entrée ou en sortie nous ramène a la configuration du pic
A+
DS1307 (RTC) + LCD + PIC 16F877 A
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Re,
J'ai regardé un peu mieux. JE ne connais pas les simulateurs et leurs réactions.
1/ en principe on place une résistance de Pull-UP sur la broche MCLR et pas direct au PIC . ( genre 10k)
2/ MaÏ a raison il ne faut pas mettre la broche Vee du LCD à la masse mais sur un potentiomètre pour régler la luminosité . Si tu le mets à la masse la luminosité sera au plus faible et donc tu ne verra rien ( je sais pas si ça fonctionne en simu). Pareil si tu la mets à Vcc tu risque d'avoir trop de contraste et donc tout noir.
3/ Sans DS du DS1307, je trouve bizarre que le plusde l’alimentation soit branché sur Vout ( qui me semblerais une sortie plutôt qu'une entrée).
4/ Ta DS1307 est alimentée en 3V ton pic en 3.3v ? sinon peut être un probléme de signal si en 5V sur le bus I2C ?
Sans ton programme complet dur d'aller plus loin .
Essaye de faire fonctionner ton LCD tout seul ( genre affiche un texte quelconque) ,puis ensuite une variable .
Il faut tout de même que tu passe le PORTB en numérique . ( voir la commande)
L'i2C est bien initialisé ? ainsi que le LCD ?
J'ai regardé un peu mieux. JE ne connais pas les simulateurs et leurs réactions.
1/ en principe on place une résistance de Pull-UP sur la broche MCLR et pas direct au PIC . ( genre 10k)
2/ MaÏ a raison il ne faut pas mettre la broche Vee du LCD à la masse mais sur un potentiomètre pour régler la luminosité . Si tu le mets à la masse la luminosité sera au plus faible et donc tu ne verra rien ( je sais pas si ça fonctionne en simu). Pareil si tu la mets à Vcc tu risque d'avoir trop de contraste et donc tout noir.
3/ Sans DS du DS1307, je trouve bizarre que le plusde l’alimentation soit branché sur Vout ( qui me semblerais une sortie plutôt qu'une entrée).
4/ Ta DS1307 est alimentée en 3V ton pic en 3.3v ? sinon peut être un probléme de signal si en 5V sur le bus I2C ?
Sans ton programme complet dur d'aller plus loin .
Essaye de faire fonctionner ton LCD tout seul ( genre affiche un texte quelconque) ,puis ensuite une variable .
Il faut tout de même que tu passe le PORTB en numérique . ( voir la commande)
L'i2C est bien initialisé ? ainsi que le LCD ?
DS1307 (RTC) + LCD + PIC 16F877 A
DS1307 (RTC) + LCD + PIC 16F877 A
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
3/ Sans DS du DS1307, je trouve bizarre que le plusde l’alimentation soit branché sur Vout ( qui me semblerais une sortie plutôt qu'une entrée).
tout à fait ; SOUT est une sortie (collecteur ouvert) pouvant etre à 1Hz ou multiple suivant l'init du RTC DS1307
Vbat doit etre connecté à VBat ! alim de secours de la RTC.
le DS1307 serait alimenté en 5V .. mais avec le simulateur Proteus ?????
Dans la vraie vie on ne se pose pas une telle question.
[resolu] DS1307 (RTC) + LCD + PIC 16F877 A
Bonsoir a tous,
Merci d'avance pour votre aide. Je vais essayé de répondre a toutes vos questions
Avec quel compilateur travail tu ?
Je travail avec mikroC
As tu essayé d’afficher en premier du texte sur ton LCD ?
oui et le texte s'affiche bien.
Peut tu poster TOUT ton code ?
Bien sur, le voici :
Sur le schéma le rétroéclairage a la masse pas bon il faut passer par un potar.
Sous simulation le lcd s'allume toujours bien avec ou sans potar.
Ta DS1307 est alimentée en 3V ton pic en 3.3v ?
j'avoue ne pas savoir a combien est le pic. Mais je pense que la simulation n'en prend pas compte.
Après j'ai encore du mal a bien comprendre les datasheet
peux être trop novice pour ce projet.
si non voici le datasheet du 16f877A
Merci de votre aide en tout cas.
Ps: vous ne travaillez jamais avec des simulateurs ?
@++
Merci d'avance pour votre aide. Je vais essayé de répondre a toutes vos questions
Avec quel compilateur travail tu ?
Je travail avec mikroC
As tu essayé d’afficher en premier du texte sur ton LCD ?
oui et le texte s'affiche bien.
Peut tu poster TOUT ton code ?
Bien sur, le voici :
Code : Tout sélectionner
/*----------------------------------------------------------------------------------
- Tutoriel Module RTC 2 click sur plaque easyPic 7
- fait par Jérémy le 01/11/2015 sur www.FantasPic.fr
- Pic 18F45K22 avec MikroC 6.6.2
- Fosc : 8Mhz
----------------------------------------------------------------------------------*/
#define RTC_ADDR 0xD0 // Adresse I²C de l'esclave + ecriture ( DS1307) 0xD0
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Constantes
/* unsigned char txt1[]=" RTC2 click sur ";
unsigned char txt2[]="www.FantasPic.fr"; */
// Variables
unsigned char heures, minutes, secondes, jour, n_jour, mois, annee, D_secondes, U_secondes;
char oldstate = 0;
// Prototypes
unsigned short Bcd2Dec(unsigned short decnum);
unsigned short Dec2Bcd(unsigned short decnum);
/****************************************************************************
* Fonction: Lire les données sur le RTC
* parametre d'entrée : adresse du registre à lire
* parametre de sortie : valeur lue dans le registre
**********************************************************************************/
unsigned char RTC_Read(unsigned char addr){
unsigned char value; // Déclaration variable temporaire
I2C1_Start(); // Début de l'I²C
I2C1_Wr(RTC_ADDR); // Adresse du RTC ( 0xD0 cf datasheet)
I2C1_Wr(addr); // adresse du registre à lire
I2C1_Start(); // On répète le signal de départ
I2C1_Wr(RTC_ADDR); // Adresse du DS1307
value = I2C1_Rd(0); // lecture et enregistrement de la valeur le 0=pour no ACK
I2C1_Stop(); // Arrêt de l'I²C
return value; // On retourne la valeur lue
}
/**************************************************************************************************
* Fonction: Ecrire les données sur le DS1307
* parametre d'entrée : adresse du registre à ecrire + valeur à y mettre
**************************************************************************************************/
void RTC_Write(unsigned char addr, unsigned char value){
I2C1_Start(); // Début de l'I²C
I2C1_Wr(RTC_ADDR); // Adresse du RTC ( 0xD0 cf datasheet)
I2C1_Wr(addr); // adresse du registre à écrire
I2C1_Wr(value); // On écrit la valeur dans le registre
I2C1_Stop(); // Arrêt de l'I²C
}
/**************************************************************************************************
* Fonction: Ecrire le Groupe Date Heure sur appui du BP
* parametre d'entrée : Les 7 valeurs du GDH à initialiser
**************************************************************************************************/
void Ecrire_GDH (unsigned char heures , unsigned char minutes, unsigned char secondes ,
unsigned char jour,unsigned char n_jour, unsigned char mois,unsigned char annee){
I2C1_Start(); // Début de l'I²C
I2C1_Wr(RTC_ADDR); // Adresse du RTC ( 0xD0 cf datasheet)
I2C1_Wr(0); // Met le pointeur à cette adresse ( N° registre)
secondes = Dec2Bcd(secondes); // Conversion de décimal en BCD pour le RTC
I2C1_Wr(secondes); // On écrit la valeur dans le registre des secondes
minutes = Dec2Bcd(minutes); // Après écriture la valeur du pointeur du registre est incrémenter automatiquement
I2C1_Wr(minutes); // On peut enchainer directement avec la prochaine valeur
heures = Dec2Bcd(heures); // etc ... toutes à la suite.
I2C1_Wr(heures);
jour = Dec2Bcd(jour);
I2C1_Wr(jour);
n_jour = Dec2Bcd(n_jour);
I2C1_Wr(n_jour);
mois = Dec2Bcd(mois);
I2C1_Wr(mois);
annee = Dec2Bcd(annee);
I2C1_Wr(annee);
I2C1_Stop(); // Arrêt de l'I²C
}
/**************************************************************************************************
* Fonction: Lit le Groupe Date Heure sur le RTC pour mettre à jour l'affichage
**************************************************************************************************/
void Lecture_GDH(){
I2C1_Start(); // Début de l'I²C
I2C1_Wr(RTC_ADDR); // Adresse du RTC ( 0xD0 cf datasheet)
I2C1_Wr(0); // lecture à cette adresse ( N° registre)
I2C1_Repeated_Start(); // On répète le signal de départ
I2C1_Wr(RTC_ADDR+1); // Adresse du DS1307 (1=lire / 0=ecrire)
secondes = I2C1_Rd(1); // Lecture et enregistrement de la valeur
secondes = Bcd2Dec(secondes); // Conversion de BCD en décimal pour l'afficheur
minutes = I2C1_Rd(1);
minutes = Bcd2Dec(minutes);
heures = I2C1_Rd(1);
heures = Bcd2Dec(heures);
jour = I2C1_Rd(1);
jour = Bcd2Dec(jour);
n_jour = I2C1_Rd(1);
n_jour = Bcd2Dec(n_jour);
mois = I2C1_Rd(1);
mois = Bcd2Dec(mois);
annee = I2C1_Rd(0);
annee = Bcd2Dec(annee);
I2C1_Stop(); // Arrêt de l'I²C
}
/*##################################################################################
########################## PROGRAMME PRINCIPAL ###############################
##################################################################################*/
void main(){
/* ANSELA = 0; // Configure le PORTA en digital
ANSELB = 0; // Configure le PORTB en digital
ANSELC = 0; // Configure le PORTC en digital
SLRCON = 0; // ?? Configure all PORTS at the standard Slew */
PORTB = 0;
TRISB = 0; // Configure PORTB as output
TRISA0_bit = 1; // Met RA0 en entrée pour le BP.
// Utilisé pour initialisé l'horloge avec une valeur enregistrée
I2C1_Init(100000); // Initialise le BUS I2C
Lcd_Init(); // Initialise le Lcd
Lcd_Cmd(_LCD_CLEAR); // Efface écran
Lcd_Cmd(_LCD_CURSOR_OFF); // Curseur off
/*Lcd_Out(1,1,txt1); // Écrit le texte de présentation 1er ligne
Lcd_Out(2,1,txt2); // Écrit le texte de présentation 2iéme ligne */
LCD_Chr(1,9,'.'); // On écrit la matrice du texte statique
LCD_Chr(1,12,'.');
LCD_Out(2,1,"Heure:");
LCD_Chr(2,11,':');
LCD_Chr(2,14,':');
LCD_Out(1,13,"20"); // le 20 c'est pour l'année 20xx
Ecrire_GDH( 06, 36, 50, 4, 14, 04, 16); //heure: min: sec: N°jour: jour: mois: année
/*##################################################################################
############################ BOUCLE INFINIE ##################################
##################################################################################*/
while(1){
/*if (Button(&PORTA, 0, 1, 0))oldstate = 1; // Anti-rebond
if (oldstate && Button(&PORTA, 0, 1, 1)) { // Si le BP est appuyé on envoi le GDH suivant
Ecrire_GDH( 23, 59, 50, 4, 31, 12, 15); //heure: min: sec: N°jour: jour: mois: année
oldstate = 0; // mise à 0 du flag
}*/
Lecture_GDH();
switch(jour) // On sélectionne le jour suivant la valeur retournée
{
case 1: LCD_Out(1,1, "Lundi"); break; // Affichage du jour en fonction de la valeur
case 2: LCD_Out(1,1, "Mardi"); break;
case 3: LCD_Out(1,1, "Mer "); break;
case 4: LCD_Out(1,1, "Jeudi"); break;
case 5: LCD_Out(1,1, "Vend "); break;
case 6: LCD_Out(1,1, "Sam "); break;
case 7: LCD_Out(1,1, "Dim "); break;
}
Lcd_Chr(1,7, (n_jour / 10) + 48); // Le numéro du jour dizaine
Lcd_Chr(1,8, (n_jour % 10) + 48); // Le numéro du jour unité
Lcd_Chr(1,10, (mois / 10) + 48);
Lcd_Chr(1,11, (mois % 10) + 48);
Lcd_Chr(1,15, (annee / 10) + 48);
Lcd_Chr(1,16, (annee % 10) + 48);
Lcd_Chr(2,9, (heures / 10) + 48); // Deuxième lignes 9iéme caractère dizaine des heures
Lcd_Chr(2,10, (heures % 10) + 48); // Unité des heures
Lcd_Chr(2,12, (minutes / 10) + 48);
Lcd_Chr(2,13, (minutes % 10) + 48);
Lcd_Chr(2,15, (secondes / 10) + 48);
Lcd_Chr(2,16, (secondes % 10) + 48);
Delay_mS(10); // pause de 10ms
}
} Sur le schéma le rétroéclairage a la masse pas bon il faut passer par un potar.
Sous simulation le lcd s'allume toujours bien avec ou sans potar.
Ta DS1307 est alimentée en 3V ton pic en 3.3v ?
j'avoue ne pas savoir a combien est le pic. Mais je pense que la simulation n'en prend pas compte.
Après j'ai encore du mal a bien comprendre les datasheet
si non voici le datasheet du 16f877A
Merci de votre aide en tout cas.
Ps: vous ne travaillez jamais avec des simulateurs ?
@++
Modifié en dernier par venom le jeu. 14 avr. 2016 06:39, modifié 2 fois.
DS1307 (RTC) + LCD + PIC 16F877 A
DS1307 (RTC) + LCD + PIC 16F877 A
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Ps: vous ne travaillez jamais avec des simulateurs ?
J'ai la chance de posséder une carte easyPic7, que je trouve bien mieux qu'un simulateur !
Pense à regarder aussi les adresse I2C de ton simulateur si c'est bon ? Tiens nous au jus
[resolu] DS1307 (RTC) + LCD + PIC 16F877 A
C'est bon j'ai trouver. En faite mon montage ainsi que le code était "bon" car sous simulateur, il faut ajouté le debugger I2C
Voici le montage modifier pour vous montrer le changement :
Ok pour la easypic7 Jérémy, je me doute que sa doit être mieux pour bosser dessus
mais c'est chère
Merci de votre aide en tout cas.
@++
Voici le montage modifier pour vous montrer le changement :
Ok pour la easypic7 Jérémy, je me doute que sa doit être mieux pour bosser dessus
Merci de votre aide en tout cas.
@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par venom le jeu. 14 avr. 2016 18:46, modifié 3 fois.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités


