Bonjour, ce n'est pas dans mes habitude de demander de l'aide dans les forum mais la je pèche vraiment... après deux jours à fouiller tous les forum du web et à essayer dans tous les sens. Mais là je bug complète (enfin j'ai plus l'impression que c'est Mplab X IDE qui bug)
Le projet : j'essaye de faire communiquer plusieurs PIC 18f4550 entres eux (l'un gère un 4*16 LCD, l'autre les entrés (boutons de commande, encodeur,...) un autres les capteur de température DTS et les relais...
J'ai décider de les faire communiquer par I2C afin d'avoir plusieurs esclave et potentiellement deux maitres.
J'ai commencé à programmé avec HTC
La gestion du LCD : pas de problème.
L'I2C : impossible de faire communiquer deux PIC entres eux. Une simple écriture et le PIC esclave ne capte pas l'écriture...
J'ai pris des routines toutes faites, j'ai réécrit mes propres routine (Merci Bigonoff )mais rien n'y fait...
Du coup j'ai décider de migrer vers C18 où il existe des bibliothèques toutes faite pour l'I2C. Et la incompréhension total :
J'ai comme message d'erreur: could not find definition of symbol 'WriteI2C' in file './build/default/production/main.o'.Code:#include <p18f4550.h> #include <stdio.h> #include <stdlib.h> #include <delays.h> #include <string.h> #include <i2c.h> ... OpenI2C(MASTER, SLEW_ON); SSPADD = 49; // Quartz de 20Mhz pour f= 400Khz IdleI2C(); StartI2C(); IdleI2C(); WriteI2C(0x10); // PIC #2 adresse w:0x10 e: 0x11 IdleI2C(); StopI2C();
pourtant lorsque j'efface le WriteI2C, pas de souci le code s'exécute sans problème (sur KitPIC3) y compris les autres routines comprise dans I2C.h ... Mystère complet...
Autre problème qui me fait tourner en rond : sur HTC j'ai créer une routine pour écrire une chaine de caractère à une adresse précise sur l'LCD du type
Sur C18: impossible de faire une routine simple, j'ai du finter en faisant un truc sale du style :Code:void lcd(unsigned char text[], unsigned char adresse); main(){ lcd("Text a écrire",40); } void lcd_txt(unsigned char text_lcd[], unsigned char adresse){ // Routine de gestion de l'adresse .. int i; int l ; l = strlen(text_lcd); for(i=0;i<=l;i++){ if(text_lcd[i]!=0){ lcd_lettre(text_lcd[i]); } } }
N'y à t'il pas moyen de transmettre plus simplement une chaine de caractère provenant du programme à une autre fonction directement en argument?Code:main(){ char txt[]; sprintf(txt,"Test"); lcd(txt,1); } void lcd(char txt[], unsigned char add){ .... }
Un énorme merci d'avance si quelqu'un peu m'aider à avancer un peu face à ce casse tête.
-----