voici la mise a jour de mon schéma :
-----
voici la mise a jour de mon schéma :
Il faut regarder comment LAT doit être déclaré avec ton compilo, je n'utilise pas XC8.
Laisse tomber, ce PIC n'utilise pas LAT...
Bref, tape le dernier code à l'identique en mettant cette fois:
....
PORTBbits.RB1 = 1;
while(1);
LAT n'est pas déclaré dans pic16f628a.h, il y a un PCLATH ...
Ca n'a rien à voir.
Tant que le schéma n'est pas visible je ne peux rien dire de plus, essaye selon le post#33 en attendant.
ok, cela ne marche toujours pas... je désespère...
voici la modif appliquée :
****************************** **********
int main(void)
{
PCON = 0x07;
initCtrlPorts();
PORTBbits.RB1 = 1; // attribution de la valeur 1 à la sortie RB1 (pin 7)
PORTBbits.RB3 = 1; // attribution de la valeur 1 à la sortie RB3 (pin 9)
while(1);
}
****************************** ****
En tout cas, merci de passer du temps avec moi et mon problème.
ah oui aussi, je confirme que le fichier hex et bien généré comme il faut.
Tu ne fais pas ce que je t'ai demandé.
Oublie RB3 pour le moment!
660 Ohms?? D'où tu sors pareil valeur?
Normal que ta led soit éteinte avec 1mA...
Enlève une led et met 100 Ohms.
ok, LED sur RB3 virée, R660 remplacée par R de 80ohms (j'ai pas trouvé 100ohms).
et ça marche pas...
Ton schéma est beaucoup trop simpliste.
Qu'as-tu mis ente VCC et GND de ton PIC?
Tu amènes juste les 2 fils d'alimentation?
Sur quoi as-tu fait ton montage?
Bref, balance vite une photo car je pense que le problème est du coté hard.
@+
voici une photo
Tu mesures bien 3.3V entre VDD et GND de ton µC?
Relis temporairement l'anode de ta led au +3.3V pour voir si au moins si elle s'éclaire bien.
oui j'ai bien 3.3V et oui la LED s’éclaire bien. Je vais prendre un autre µC histoire de voir..
Comment tu programmes ton µC?
sous MPLABX, aprés avoir fait un "Build", je fais un "Make and program device",
la fenêtre Pickit3 s'ouvre et s’exécute la programmation :
Connecting to MPLAB PICkit 3...
Firmware Suite Version.....01.28.90 *
Firmware type..............Midrange
Target detected
Device ID Revision = 8
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x7ff
configuration memory
Programming...
Programming/Verify complete
Il faut aussi prévoir un découplage de ton alimentation au plus près du µC avec au minimum 100nF.
C'est un µC neuf?
mon alimentation vient d'un régulateur de tension type LT1121 avec condensateur de 1µF, assurant une tension de 3,3V.
mes µC sont quasi neuf, et j'en ai d'autre tout neuf jamais utilisés.
Ok.
Essaye ce fichier hex et dis moi si ça fonctionne.
@+
en attendant la validation de la pièce jointe, j'ai fait un essai avec un fichier hex (clignotement d'une LED) et ça fonctionne, par contre je n'ai que le fichier hex et du coup je ne sais pas comment c'est codé... mais ça fonctionne, du coup cela ne remet pas en cause le transfert du code vers le uC.
Je relis ton code et quelque chose me gêne dans le déclaratif de la fonction main().ok, cela ne marche toujours pas... je désespère...
voici la modif appliquée :
****************************** **********
int main(void)
{
PCON = 0x07;
initCtrlPorts();
PORTBbits.RB1 = 1; // attribution de la valeur 1 à la sortie RB1 (pin 7)
PORTBbits.RB3 = 1; // attribution de la valeur 1 à la sortie RB3 (pin 9)
while(1);
}
****************************** ****
En tout cas, merci de passer du temps avec moi et mon problème.
int main(void) attend uen information de retour de type entier, hors ta fonction ne retourne rien du tout...
Supprime le while(1); et écris à la place return 0;
Et sinon dernière tentative, remplace PORTBbits.RB1 = 1; par PORTB=0x02;
Après je n'ai plus d'idée sauf peut-être une suggestion:
débarrase toi de XC8!!
J'ai remplacé while(1) par return 0; =>> ça ne donne rien.
J'ai chargé ton fichier hex dans le uC, sans résultat...
j'ai remplacé PORTBbits.RB1 = 1; par PORTB=0x02; sans résultat,
je jette du coup mon pc par le fenêtre et vais faire un tour...
plus serieusement, si je vire XC8, je prends quoi a la place ??
Merci.
Ca prouve au moins que ça vient bien de ton compilateur, soit un bit de config mal déclaré, soit une config mal faite.
Faut dire que c'est plutôt folklorique cet IDE...
Le code que je tai envoyé je l'ai généré sous MikroC en moins de30s, il tourne parfaitement sur ma carte avec un 16F628A.
je vais essayer de faire fonctionner le circuit avec ton fichier. J'ai peut etre un prob sur ma carte.
Merci.
Salut,
Un autre gros problème dans ton programme actuel c'est le BOR dans les bits de configurations...
Le BOR reset le PIC quand la tension Vdd descend MAIS....la datasheet montre que c'est prévu pour Vdd = 5V car le BOR fonctionne entre 3.65V et 4.35V.
Si ton alimentation est en 3V ton PIC sera toujours en reset...
Il faut changer le bit de configuration BOR et écrire :
de même, si tu n'as pas de circuit de reset externe, il faut activer le reset interne :Code:#pragma config BOREN = OFF // desactiver le BOR si fonctionnement en 3V
Je te conseille de suivre un tutoriel et de lire la documentation sans quoi tu passer beacoup de temps à faire des essais pour rien...Code:#pragma config PWRTE = ON // choix reset interne
Regarde par exemple ici : http://www.gooligum.com.au/tutorials.html
a+
UN ÉNORME MERCI !!!!!!!!!! ça fonctionne...
Je vais enfin pouvoir partir sur un bout de code qui fonctionnel et poursuivre tranquillement mon apprentissage.
Merci encore à tous pour votre aide, voici le code final (qui pourra peut être aider d'autres débutants) :
==> allumage d'une LED en RB1, pour le PIC16F628a, MPLAB X, XC8, tension d'alimentation de 3,3V :
/** I N C L U D E S ****************************** ****************************/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
/** Configuration Bit Settings ****************************** *****************/
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
/** T R I S ****************************** ****************************/
/** D E F I N E S ****************************** ****************************/
//#define LED1 PORTBbits.RB1
//#define TRISLED1 TRISBbits.RB1
/** I N I T I A L I S ****************************** *************************/
void initCtrlPorts(void)
{
TRISB = 0b00000000; // les PIN du port B sont toutes en sortie
PORTB = 0; // attribution valeur 0 aux PIN du port B
}
/************* START OF MAIN FUNCTION ***************/
int main(void)
{
PCON = 0x07;
initCtrlPorts();
PORTB = 0x02; // attribution de la valeur 1 à la sortie RB1 (pin 7)
//PORTBbits.RB3 = 1; // attribution de la valeur 1 à la sortie RB3 (pin 9)
return 0;
}
Bonjour à tous,
je poste ce message pour promouvoir un autre projet en cours : www.reve-de-porsche.fr
Merci.