Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme LCD avec 45K50 (Résolu)
23-09-2015, 05:19 PM, (This post was last modified: 06-10-2015, 09:31 AM by xapon66.)
#1
Probleme LCD avec 45K50 (Résolu)
Bonjour,

J'ai développé ma propre carte compatible Pinguino 45K50.
J'ai commencé les essais avec un PIC18F4550 dont je disposais.
Je viens de recevoir mon pic18F45K50 et mon application de test qui fonctionnait parfaitement avec le 4550 ne parvient plus à faire fonctionner le LCD alphanumérique avec le 45K50.
Code:
/*    ----------------------------------------------------------------------------

    Simple demo program, input and output, lcd and CDC usb
    <xapon@free.fr>
    ----------------------------------------------------------------------------
    ---------- LCD 4x16
    ----------------------------------------------------------------------------
    01 - VSS (GND)
    02 - VDD (+5V)
    03 - Vo (R = 1K Ohm to GND)
    04 - RS (pin 8 in this ex.)
    05 - RW (GND = LOW = write mode)
    06 - EN (pin 9 in this ex.)
    07 a 10 - D0 a D3   (connected to GND in this ex.)
    11 a 16 - D4 to D7  (pin 0 to 3 in this ex.)
    15 - LED+ (R = 470 Ohm to +5V)
    16 - LED- (GND)
    ---------------------------------------------------------------------------*/
 
// Global vars

u8 s  = 0;
u8 m  = 0;
u8 h = 0;
u8 Relays = 0;
u8 Btn1, Btn2;
u8 opto1,opto2,opto3,opto4;
BOOL send = false;

// This function is called every sec. by timer 0

void tick()
{
    s++;

    if (s > 59)
    {
        s = 0;
        m++;

        if (m > 59)
        {
            m = 0;
            h++;

            if (h > 23)
            {
                h = 0;
            }
        }
    }     
    lcd.setCursor(4, 1);
    lcd.printf("%02u:%02u:%02u", h, m, s);
    
    Btn1 = digitalRead(19);
    Btn2 = digitalRead(20);
    opto1 = digitalRead(13);
    opto2 = digitalRead(14);
    opto3 = digitalRead(15);
    opto4 = digitalRead(16);
    
    lcd.setCursor(0, 2);
    lcd.printf("Btn1 : %1u, Btn2 : %1u", Btn1, Btn2);
    lcd.setCursor(0, 3);
    lcd.printf("E1:%1u E2:%1u E3:%1u E4:%1u", opto1, opto2, opto3, opto4);

    digitalWrite(7,(Relays&0b00000001));
    digitalWrite(6,(Relays&0b00000010));
    digitalWrite(5,(Relays&0b00000100));
    digitalWrite(4,(Relays&0b00001000));
    digitalWrite(3,(Relays&0b00010000));
    digitalWrite(2,(Relays&0b00100000));
    digitalWrite(1,(Relays&0b01000000));
    digitalWrite(0,(Relays&0b10000000));
    if (Relays==0) {
        Relays = 1;
        }
    else {
        Relays = Relays<<1;    
    }
    send = true;
}

void setup()
{
    // 4 bits mode, last four pins are not used
    lcd.pins(22, 24, 25, 26, 27, 28, 0, 0, 0, 0); // RS, E, D4 ~ D8    

    // LCD format
    lcd.begin(20,4); // lines, dotsize

    lcd.home(); // 0, 0
    lcd.printf("Simple Clock Demo");
    CDC.println("Simple Clock Demo");
    
    // Timer0 call function tick() every sec.
    OnTimer0(tick, INT_MILLISEC, 1000);
            
    pinMode(13, INPUT);
    pinMode(14, INPUT);
    pinMode(15, INPUT);
    pinMode(16, INPUT);
    pinMode(19, INPUT);
    pinMode(20, INPUT);
    pinMode(21, OUTPUT);
    pinMode(0, OUTPUT);
    pinMode(1, OUTPUT);
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);

    digitalWrite(21,1);

}
 
void loop()
{
  if (send)
  {
      send = false;
      CDC.printf("Time : %02u:%02u:%02u \r\n", h, m, s);
      CDC.printf("Inputs : E1:%1u E2:%1u E3:%1u E4:%1u \r\n", opto1, opto2, opto3, opto4);
      CDC.printf("Btn1 : %1u, Btn2 : %1u \r\n", Btn1, Btn2);
   }

}

Quelqu'un aurait-il un début d'explication ?
Reply
27-09-2015, 08:03 PM,
#2
RE: Probleme LCD avec 45K50
J'ai ici un Pinguino 45K50 qui marche parfaitement avec la lib lcd et un afficheur 2x16.
Peux-tu commenter les lignes CDC pour voir si ceka marche à nouveau ?
It is easier to complain than it is to do, but it is better to do than it is to complain.
Reply
29-09-2015, 10:44 PM,
#3
RE: Probleme LCD avec 45K50
(27-09-2015, 08:03 PM)regis Wrote: J'ai ici un Pinguino 45K50 qui marche parfaitement avec la lib lcd et un afficheur 2x16.
Peux-tu commenter les lignes CDC pour voir si ceka marche à nouveau ?

J'avais ajouté les lignes CDC après mais je vais réessayer d'enlever tout le code qui ne touche pas au LCD et refaire le test comparatif.
Pour info, j'ai aussi essayé avec un exemple simple et cela ne marche pas non plus.
Est-ce qu'il peut y avoir un problème suivant le boot loader que j'ai installé et la fréquence de l'oscillateur interne ?
Je me demande s'il ne peut pas y avoir un problème de niveau des E/S du PIC18F45k50 ?
A+

Xavier
Reply
30-09-2015, 11:08 AM,
#4
RE: Probleme LCD avec 45K50
Pour moi, il n'y a pas de lien ni avec le bootloader ni avec le niveau des I/O.
Les problèmes survenant avec les LCD sont souvent en liés à de mauvais timings.
Si ton programme faisait appel à des interruptions ce pourrait être une des causes.
En tous cas, tu peux aller voir du coté de la fonction lcd_pulseEnable qui est le coeur de cette lib et ajouter des délais.
It is easier to complain than it is to do, but it is better to do than it is to complain.
Reply
01-10-2015, 05:28 PM,
#5
RE: Probleme LCD avec 45K50
Bof !
Je viens de passer deux trois à chercher. Ça résiste toujours.
Est-ce qu'un qu'une des fonctions alternatives sur le port D ne pourrait pas avoir la priorité ?
Il y a les ports analogiques 20 à 27 et Les sorties PWM P1B, P1C et P1D qui pourraient poser problème.
Je vais le commander individuellement en sortie pour vérifier.
Reply
01-10-2015, 05:48 PM,
#6
RE: Probleme LCD avec 45K50
Tu utilises quelles pins ?
It is easier to complain than it is to do, but it is better to do than it is to complain.
Reply
01-10-2015, 08:23 PM,
#7
RE: Probleme LCD avec 45K50
C'est écrit dans le code mais je le remets.
// 4 bits mode, last four pins are not used
lcd.pins(22, 24, 25, 26, 27, 28, 0, 0, 0, 0); // RS, E, D4 ~ D8
Les pins 26, 27 et 28 sont partagés avec P1B, P1C et P1D qui sont prioritaires d'après la datasheet.
Je viens de les tester en les commandant une par une => elles sont bloquées au niveau bas.
Reply
02-10-2015, 01:50 PM,
#8
RE: Probleme LCD avec 45K50
C'est bon !
Le problème est résolu.
Je viens de me rendre compte que la numérotation des broches est différente entre le PIC18H4550 et le 45K50.
Bref, un programme qui fonctionne sur 4550 doit être adapté pour fonctionner avec le 45K50.
=> cela devrait être indiqué en gras dans le WIKI !
Reply
02-10-2015, 01:58 PM, (This post was last modified: 02-10-2015, 02:03 PM by regis.)
#9
RE: Probleme LCD avec 45K50
Edit1 : Oops nos messages se sont croisés ;-)
Edit2 : http://wiki.pinguino.cc/index.php/PIC18F...no#Pin_Out
[Image: 700px-P45k50_cr.png]

Toutes ces pins fonctionnent très bien sur mon 45K50.
Tu as peut-être une vieille version du fichier digital.h ?
Il me semble me souvenir que certaines pins avaient été omises dans les premières versions.
Tu devrais avoir ceci :

Code:
/**********************************************************************/
#elif defined(PINGUINO45K50)
/**********************************************************************/
                                                   // Pinguino pin number
const unsigned char mask[36]={
                   _0,_1,_2,_3,_4,_5,_6,_7,        // 00 - 07
                   _0,_1,_2,_3,_4,_5,_6,_7,        // 08 - 15
                   _0,_1,_2,_3,_4,_5,_6,_7,        // 16 - 23
                   _0,_1,_2,_3,_4,_5,_6,_7,        // 24 - 31
                   _0,_1,_2,_3                        // 32 - 35
                   };

const unsigned char port[36]={
                   pB, pB, pB, pB, pB, pB, pB, pB,
                   pA, pA, pA, pA, pA, pA, pA, pA,
                   pC, pC, pC, pC, pC, pC, pC, pC,
                   pD, pD, pD, pD, pD, pD, pD, pD,
                   pE, pE, pE, pE
                   };
It is easier to complain than it is to do, but it is better to do than it is to complain.
Reply
03-10-2015, 04:33 AM,
#10
RE: Probleme LCD avec 45K50
Et moi j'ai utilisé ça pour démarrer :
[Image: PIC18F4550_diagram.png]
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)