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 : easynixie clock a 16f628a : chiffres non corrects ?
bonjour tlm,
j'ai dessiné et cablé un pcb d'apres le schéma : schema, paru aussi dans le num janvier 2008 de la revue radio pratycka electronica, le schéma et le soft est donné pour 4 µcontroleur different. j'ai choisi version avec le 16f628A, on peut telecharger le hex et le C hitech piccc lite : http://elbastl.sweb.cz/pic628.zip. A la mise sous tension, les 2 afficheurs sec et dizaine de sec indiquent 00, quelques secondes apres affichage : 307470 avec le chiffre des secondes qui change sauf que les chiffres sont incoherents. j'ai testé mon cablage : entrées ABCD du 74141 (j'ai un k155 russe), et surtout les sorties du support de 74141 : je connecte le 5 volts sur la pin qui doit allumer le 1, puis le 2 etc...ok, soit ma fuse configuration du 628 est incorrecte : intrc i/o pour utiliser les ports ra6 ra7, sur le brochage du 628 la pin 4 RA5 est marquée dig1 B, la pin 1 RA2 aussi : c'est celle qu'il faut utiliser d'apres le fichier c, ra5 est non connectée. A mon avis le 16f628 n'envoie pas les bons codes ABCD au 74141, j'ai du mal a comprendre les lignes 205 a 217 du fichier c et surtout la "table digit" de la ligne 164
static const byte tabledigit[] = {3,2,7,4,1,9,8,0,5,6,0xF,0xF,0xF,0xF,0xF,0xF};
je crois que je devrai la changer, et c'est là que je suis bloqué, je n'ai pas hitec piccc, disponible (gratuitement ?) sur le site microchip : inscription chez microchip (?) que j'avais au temps où je leur commandai des samples (çà fait plus de 10 ans, lol).
je pense que çà devrait etre : static const byte tabledigit[] = {0,1,2,3,4,5,6,7,8,9,0xF,0xF,0xF,0xF,0xF,0xF};
que pensez vous de ce tableau "table digit" ?
merci
j'ai dessiné et cablé un pcb d'apres le schéma : schema, paru aussi dans le num janvier 2008 de la revue radio pratycka electronica, le schéma et le soft est donné pour 4 µcontroleur different. j'ai choisi version avec le 16f628A, on peut telecharger le hex et le C hitech piccc lite : http://elbastl.sweb.cz/pic628.zip. A la mise sous tension, les 2 afficheurs sec et dizaine de sec indiquent 00, quelques secondes apres affichage : 307470 avec le chiffre des secondes qui change sauf que les chiffres sont incoherents. j'ai testé mon cablage : entrées ABCD du 74141 (j'ai un k155 russe), et surtout les sorties du support de 74141 : je connecte le 5 volts sur la pin qui doit allumer le 1, puis le 2 etc...ok, soit ma fuse configuration du 628 est incorrecte : intrc i/o pour utiliser les ports ra6 ra7, sur le brochage du 628 la pin 4 RA5 est marquée dig1 B, la pin 1 RA2 aussi : c'est celle qu'il faut utiliser d'apres le fichier c, ra5 est non connectée. A mon avis le 16f628 n'envoie pas les bons codes ABCD au 74141, j'ai du mal a comprendre les lignes 205 a 217 du fichier c et surtout la "table digit" de la ligne 164
static const byte tabledigit[] = {3,2,7,4,1,9,8,0,5,6,0xF,0xF,0xF,0xF,0xF,0xF};
je crois que je devrai la changer, et c'est là que je suis bloqué, je n'ai pas hitec piccc, disponible (gratuitement ?) sur le site microchip : inscription chez microchip (?) que j'avais au temps où je leur commandai des samples (çà fait plus de 10 ans, lol).
je pense que çà devrait etre : static const byte tabledigit[] = {0,1,2,3,4,5,6,7,8,9,0xF,0xF,0xF,0xF,0xF,0xF};
que pensez vous de ce tableau "table digit" ?
merci
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par elektrax le mar. 28 août 2018 10:38, modifié 1 fois.
easynixie clock a 16f628a : chiffres non corrects ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour elektrax ,
As-tu refait un schema avec le PIC .. car impossible à suivre avec le schema original ...
Il faut bien pouvoir s"appuyer sur un schema pour suivre aussi le programme.
de plus, si on rajoute le pavé 16F628 tel que decrit
rien ne va plus ..
As-tu refait un schema avec le PIC .. car impossible à suivre avec le schema original ...
Il faut bien pouvoir s"appuyer sur un schema pour suivre aussi le programme.
de plus, si on rajoute le pavé 16F628 tel que decrit
rien ne va plus ..
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
easynixie clock a 16f628a : chiffres non corrects ?
en effet il a fallu redessiner en tenant compte du branchement pic, la pin4 n'est pas digit1 B.
à part les chiffres non conformes, je l'ai laissé 1 journée branchée et çà fonctionne : genre chiffre 3 a la place du zero, d'ailleurs quand je "mets à l"heure" pour les dizaines d'heures je n'ai que les chiffres 3 2 7 qui défilent, alors que çà devrait etre 0 1 2, comme si, pour des raisons de circuit imprimé, l'auteur avait choisi la sortie 74141 du chiffre 3 reliée au chiffre zero du nixie, mais çà n'apparait pas sur le schema qui est dessiné avec les sorties du 74141 conforme à la datasheet, soit je change le cablage entre les sorties du 74141 et les nixies (j'ai mis des in16)
141 3 nixie 0
2 nix 1
7 nix 2
4 nix 3
1 nix 4
9 nix 5
8 nix 6
0 nix 7
5 nix 8
6 nix 9
ou recompiler en changeant juste ce tableau, si je trouve un hitec picc qui accepte le 16f628A qui n'est pas défini dans piccc 9.50 (si quelqu'un connait ?)
déjà pour comprendre que POS 0 correspond aux secondes et POS 5 aux dizaines de minutes...
à part les chiffres non conformes, je l'ai laissé 1 journée branchée et çà fonctionne : genre chiffre 3 a la place du zero, d'ailleurs quand je "mets à l"heure" pour les dizaines d'heures je n'ai que les chiffres 3 2 7 qui défilent, alors que çà devrait etre 0 1 2, comme si, pour des raisons de circuit imprimé, l'auteur avait choisi la sortie 74141 du chiffre 3 reliée au chiffre zero du nixie, mais çà n'apparait pas sur le schema qui est dessiné avec les sorties du 74141 conforme à la datasheet, soit je change le cablage entre les sorties du 74141 et les nixies (j'ai mis des in16)
141 3 nixie 0
2 nix 1
7 nix 2
4 nix 3
1 nix 4
9 nix 5
8 nix 6
0 nix 7
5 nix 8
6 nix 9
ou recompiler en changeant juste ce tableau, si je trouve un hitec picc qui accepte le 16f628A qui n'est pas défini dans piccc 9.50 (si quelqu'un connait ?)
déjà pour comprendre que POS 0 correspond aux secondes et POS 5 aux dizaines de minutes...
easynixie clock a 16f628a : chiffres non corrects ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
Est-ce que ton code fait moins de 2Ko ?
pour essayer de le compiler avec Milkro C..
MikroC est tres semblable à Hitech en fait ..
je viens de l'adapter et compilation OK .. le run c'est autre chose
Cela devrait passer avec la version MikroC OK en libre essai juqu'à 2Ko
Used ROM (program words): 543 (27%) soit 1086 bytes
à toi de jouer..
Est-ce que ton code fait moins de 2Ko ?
pour essayer de le compiler avec Milkro C..
MikroC est tres semblable à Hitech en fait ..
je viens de l'adapter et compilation OK .. le run c'est autre chose
Cela devrait passer avec la version MikroC OK en libre essai juqu'à 2Ko
Used ROM (program words): 543 (27%) soit 1086 bytes
à toi de jouer..
Code : Tout sélectionner
// revu pour MikroC
/* ClockPIC.c */
/* (c) 2007 St */
/* Program for nixie clock controlled by PIC16F627A or PIC16F628A */
/* Xtall frequency: 32.768 kHz (External clock for Timer1) */
/* Compiler: HI-TEC PICC-Lite */
/* ========================================================================== */
#define word unsigned int
#define byte unsigned char
// Definition of PIN connection
#define POSITION0 PORTA.F7 // digit anode switches
#define POSITION1 PORTA.F6
#define POSITION2 PORTA.F0
#define POSITION3 PORTB.F5
#define POSITION4 PORTB.F4
#define POSITION5 PORTB.F2
#define DIGIT0 PORTB.F1 // outputs for nixie driver 74141
#define DIGIT1 PORTA.F2
#define DIGIT2 PORTA.F3
#define DIGIT3 PORTB.B0
#define BUZZER PORTB.F3 // alarm buzzer
#define KEYINP PORTA.F4 // button input
// Connection of function buttons to digit positions
#define KEYMENU 4
#define KEYUP 3
#define KEYENTER 2
// Global variables used in main loop and in the timer interrupt
// counter for 2 miliseconds ticks
word milisec = 0;
// arrays for real time, alarm and auxiliary time during setting
byte time[6],alarm[6],auxtime[6];
// pressed button code, half second flag (for alarm and blink), blinking position
byte button = 0, halfsec = 0, blink = 0xF;
// pointer which array to display
byte *p_digit = time;
// wait for button pressed or 20 second time-out
void waitbutton(void) {
word i;
byte n;
for(n=0; n<200; n++) {
// Wait for about 100 msec
for(i=0; i<10000; i++) {}
if(button) break;
}
}
// wait for all buttons released
void endbutton(void) {
word i;
while(button) {
button = 0;
for(i=0; i<10000; i++) {}
}
}
// function for setting array "setdata" with a new time
// seconds are not updated, just only hours and minutes
byte settime(byte *setdata) {
byte posit = 2, updated = 0, next = 1;
while(next) {
blink = posit; // updated position blinks
waitbutton();
// Test buttons and do 1 of 4 possibilities
switch(button) {
case KEYMENU : next = 0; break; // Stop updating time
case KEYENTER: { // Move to next digit
posit++;
if(posit == 6) posit = 2;
} break;
case KEYUP : { // Increment digit on this position
setdata[posit]++;
if(((posit == 2) || (posit == 4)) && (setdata[posit] == 10)) setdata[posit]=0;
if((posit == 3) && (setdata[posit] == 6)) setdata[posit]=0;
if((posit == 5) && (setdata[posit] == 3)) setdata[posit]=0;
updated = 1;
} break;
default : next = 0; // Time-out expired
}
endbutton();
}
// Hours above 23 are not allowed
if((setdata[5] == 2) && (setdata[4] > 3)) {
setdata[5] = 0; setdata[4] = 0;
}
blink = 0xF;
return(updated);
}
// ****************************
// Main program function //
// ****************************
void main(void) {
// Default values for start
time[4] = 7; time[3] = 3;
alarm[4] = 7; alarm[3] = 4;
alarm[1] = 0xF; alarm[0] = 0xF;
// Turn comparators off
CMCON = 0x07;
// Set Port I/O
TRISA = 0b00110000;
TRISB = 0b10000000;
/* Init TIMER1 for 2 milisec period - external 32 kHz clock*/
T1CON = 0b00001011; // Timer control register
TMR1L = 0; // About 1 sec to start
TMR1H = 0x80; // start Timer
TMR1IE_bit = 1; // Enable interrupt from Timer1
PEIE_bit = 1;
GIE_bit=1; /* enable interrupts */
/***** Main loop of program *****/
for(;;) {
// Set Alarm Buzzer if time == alarm time
if((time[5] == alarm[5]) && (time[4] == alarm[4]) && (time[3] == alarm[3]) && (time[2] == alarm[2]) && halfsec) BUZZER = 0; else BUZZER = 1;
if(button == KEYMENU) {
// Menu button enters time updating
endbutton();
p_digit = alarm;
if(!settime(alarm)) {
// Alarm was not updated, try Time
GIE_bit = 0; // Stop interrupt during copy
// We must not destroy real Time, copy it to auxiliary array
auxtime[5] = time[5];auxtime[4] = time[4];auxtime[3] = time[3];auxtime[2] = time[2];
GIE_bit = 1;
p_digit = auxtime;
if(settime(auxtime)) {
// Time was updated - copy it back
GIE_bit = 0;
time[5] = auxtime[5];time[4] = auxtime[4];time[3] = auxtime[3];
time[2] = auxtime[2];time[1] = 0;time[0] = 0;
GIE_bit = 1;
}
}
p_digit = time;
} else button = 0;
} /* loop forever */
/* please make sure that you never leave main */
}
/*
** ===================================================================
** Interrupt handler
** ===================================================================
*/
void interrupt() iv 0x0004 ics ICS_AUTO
{
static const byte tabledigit[] = {3,2,7,4,1,9,8,0,5,6,0xF,0xF,0xF,0xF,0xF,0xF};
static byte position = 0;
static byte auxdigit;
TMR1L = 0xC1; // New value for next
TMR1H = 0xFF; // 2 milisecond period
// Increment Time
milisec++;
if(milisec == 256) halfsec = 1;
if(milisec == 512) {
halfsec = 0; // half second flag
milisec = 0; // miliseconds
time[0]++;
if(time[0] == 10) { // seconds
time[0] = 0;
time[1]++;
if(time[1] == 6) {
time[1] = 0;
time[2]++;
if(time[2] == 10) { // minutes
time[2] = 0;
time[3]++;
if(time[3] == 6) {
time[3] = 0;
time[4]++;
if(time[4] == 10) { // hours
time[4] = 0;
time[5]++;
}
if((time[4] == 4) && (time[5] == 2)) {
time[4] = 0;
time[5] = 0;
}
}
}
}
}
}
// Clear display (all digits off)
POSITION0 = 0; POSITION1 = 0; POSITION2 = 0; POSITION3 = 0; POSITION4 = 0; POSITION5 = 0;
// New digit to display
// Test for blinking digit (and set it according "blink" variable)
if((blink == position) && halfsec) {
DIGIT0 = 1; DIGIT1 = 1; DIGIT2 = 1; DIGIT3 = 1;
} else {
// Set new digit to display
auxdigit = tabledigit[*(p_digit + position)];
DIGIT0 = 0; DIGIT1 = 0; DIGIT2 = 0; DIGIT3 = 0;
if(auxdigit & 0x1) DIGIT0 = 1;
if(auxdigit & 0x2) DIGIT1 = 1;
if(auxdigit & 0x4) DIGIT2 = 1;
if(auxdigit & 0x8) DIGIT3 = 1;
}
// Switch ON new digit
switch(position) {
case 0: POSITION0 = 1; break;
case 1: POSITION1 = 1; break;
case 2: POSITION2 = 1; break;
case 3: POSITION3 = 1; break;
case 4: POSITION4 = 1; break;
case 5: POSITION5 = 1; break;
}
// Test if pressed button with this position
if((!button) && (KEYINP == 1)) button = position;
// Update position for next digit
position++;
if(position == 6) position = 0;
TMR1IF_bit = 0; // Clear the interrupt flag
}
/* END */
Code : Tout sélectionner
0 1 mikroCPIC1618.exe -MSF -DBG -pP16F628A -C -DL -O11111114 -fo8 -N"C:\_MikroC\_MesProjets_MikroC\_16F628A_Horloge_6_Nixies\Horloge_6_Nixies_16F628A.mcppi" -SP"C:\_MikroC\mikroC PRO for PIC\Defs\" -SP"C:\_MikroC\mikroC PRO for PIC\Uses\P16\" -SP"C:\_MikroC\_MesProjets_MikroC\_16F628A_Horloge_6_Nixies\" -IP"C:\_MikroC\mikroC PRO for PIC\Uses\P16\" -IP"C:\_MikroC\_MesProjets_MikroC\_16F628A_Horloge_6_Nixies\" "Horloge_6_Nixies_16F628A.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_CType.mcl" "__Lib_CString.mcl" "__Lib_CStdlib.mcl"
0 1139 Available RAM: 208 [bytes], Available ROM: 2048 [bytes]
0 122 Compilation Started Horloge_6_Nixies_16F628A.c
0 1004 interrupt handler (interrupt at 0x0004) Horloge_6_Nixies_16F628A.c
237 123 Compiled Successfully Horloge_6_Nixies_16F628A.c
0 127 All files Compiled in 63 ms
0 1144 Used RAM (bytes): 34 (16%) Free RAM (bytes): 174 (84%) Used RAM (bytes): 34 (16%) Free RAM (bytes): 174 (84%)
0 1144 Used ROM (program words): 543 (27%) Free ROM (program words): 1505 (73%) Used ROM (program words): 543 (27%) Free ROM (program words): 1505 (73%)
0 125 Project Linked Successfully Horloge_6_Nixies_16F628A.mcppi
0 128 Linked in 31 ms
0 129 Project 'Horloge_6_Nixies_16F628A.mcppi' completed: 109 ms
0 103 Finished successfully: 22 mai 2018, 09:45:10 Horloge_6_Nixies_16F628A.mcppi
easynixie clock a 16f628a : chiffres non corrects ?
easynixie clock a 16f628a : chiffres non corrects ?
easynixie clock a 16f628a : chiffres non corrects ?
j'ai compilé le fichier C que vous avez posté hier avec mikroC demo : allume les secondes au demarrage puis apres aucun affichage
la config : int rc 4 mhz ra6 et ra7 comme I/O fosc 2 1 0= 100, config 3F18, mikroC donne 2118, pourquoi 21 a la place de 3F ?
je suis certain : fuse config doit etre 3F18 (ou 2118 avec mikroc)
je vais regler le hardware en cablant les sorties du 74141 vers les bons chiffres
Merci pour le temps que vous m'avez accordé
la config : int rc 4 mhz ra6 et ra7 comme I/O fosc 2 1 0= 100, config 3F18, mikroC donne 2118, pourquoi 21 a la place de 3F ?
je suis certain : fuse config doit etre 3F18 (ou 2118 avec mikroc)
je vais regler le hardware en cablant les sorties du 74141 vers les bons chiffres
Merci pour le temps que vous m'avez accordé
easynixie clock a 16f628a : chiffres non corrects ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
j'avais mis config Quartz 8MHz
vu les pattes XTAL sur le schema
INTOSC oscillator avec RA6 et RA7 comme Pin I/O
RA5 /MCLR /VPP disabled .. RA5 serait donc configurée en I/O ?
CONFIG : $2007 : 0x2118
4Mhz
RA5 ...
MikroC n'est pas clair de ce coté là !
contrairement sur un 18F on a clairement le choix
MCLR Pin :
MCLR pin enabled,RE3 input disabled
ou
RE3 input enabled , MCLR disbaled
vu les pattes XTAL sur le schema
INTOSC oscillator avec RA6 et RA7 comme Pin I/O
RA5 /MCLR /VPP disabled .. RA5 serait donc configurée en I/O ?
CONFIG : $2007 : 0x2118
4Mhz
RA5 ...
MikroC n'est pas clair de ce coté là !
contrairement sur un 18F on a clairement le choix
MCLR Pin :
MCLR pin enabled,RE3 input disabled
ou
RE3 input enabled , MCLR disbaled
easynixie clock a 16f628a : chiffres non corrects ?
RA5/mclr : pgmé à 0 : internal mclr tied to vcc
ra5 n'est pas utilisé
avec le hex de mikroC, on dirait que le 16f628 se bloque apres l'affichage de 00 chiffres secondes à la mise sous tension, aucun "signal" sur aucune pin à l'oscillo
#define DIGIT0 PORTB.F1 // outputs for nixie driver 74141
#define DIGIT1 PORTA.F2
#define DIGIT2 PORTA.F3
#define DIGIT3 PORTB.B0 : normal ?
merci
ra5 n'est pas utilisé
avec le hex de mikroC, on dirait que le 16f628 se bloque apres l'affichage de 00 chiffres secondes à la mise sous tension, aucun "signal" sur aucune pin à l'oscillo
#define DIGIT0 PORTB.F1 // outputs for nixie driver 74141
#define DIGIT1 PORTA.F2
#define DIGIT2 PORTA.F3
#define DIGIT3 PORTB.B0 : normal ?
merci
easynixie clock a 16f628a : chiffres non corrects ?
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 77 invités