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 : mazertoc
18f26k22 et module I2C
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
18f26k22 et module I2C
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
18f26k22 et module I2C
Bonsoir francois77, et tout le forum,
Je te réponds rapidement, car sortie du taf, je ne suis pas en état de réfléchir, As tu une eeprom en particulier pour ton choix ?
Lien du datasheet serait apprécier si tu sélectionnes une eeprom précise
Je crois avoir trouvé le moyen de compresser un fichier image pour ton écran en couleur, mais bon, il te faudra attendre la fin de semaine, que je vois si c'est faisable.
A+
Je te réponds rapidement, car sortie du taf, je ne suis pas en état de réfléchir, As tu une eeprom en particulier pour ton choix ?
Lien du datasheet serait apprécier si tu sélectionnes une eeprom précise
Je crois avoir trouvé le moyen de compresser un fichier image pour ton écran en couleur, mais bon, il te faudra attendre la fin de semaine, que je vois si c'est faisable.
A+
18f26k22 et module I2C
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Bonjour Temps-x et tout le forum
Je pense avoir trouvé un exemple en C exploitable en I2C pour un 18F26K22
https://forums.futura-sciences.com/elec ... n-i2c.html
Mon but n'est pas pour l'instant de piloter un matériel spécifique, mais d'arriver a dialoguer en I2C sur un 18F26K22
Mon objectif, c'est d'arriver a avoir un minimum de connaissance sur ce pic
Pour les écrans --> c'est ok
SPI --> ok
Les interruptions --> c'est ok, même si je n'ai pas testé toute les possibilités
Entrée Ana --> C'est OK
La suite dans les prochains jours si j'arrive a décoder correctement le langage C
A +
Francois
Je pense avoir trouvé un exemple en C exploitable en I2C pour un 18F26K22
https://forums.futura-sciences.com/elec ... n-i2c.html
Mon but n'est pas pour l'instant de piloter un matériel spécifique, mais d'arriver a dialoguer en I2C sur un 18F26K22
Mon objectif, c'est d'arriver a avoir un minimum de connaissance sur ce pic
Pour les écrans --> c'est ok
SPI --> ok
Les interruptions --> c'est ok, même si je n'ai pas testé toute les possibilités
Entrée Ana --> C'est OK
La suite dans les prochains jours si j'arrive a décoder correctement le langage C
A +
Francois
18f26k22 et module I2C
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
briques de base pour I2C software en asm
et un peu de lecture :
**************************************************************************************
le minima en C (mikroC) I2C Hardware
exemple avec RTC DS1307
briques de base pour I2C software en asm
Code : Tout sélectionner
The following routines are low level I2C routines applicable to most interfaces with I2C devices.
CONSTANT SDA=6
CONSTANT SCL=7
CONSTANT DATA_BUFF=18H ; measurements saved to 18, 19, 1A and 1B
CONSTANT BUFF_SIZE=.4 ; number of measurments
CONSTANT VARS=0CH
N EQU VARS+0
ADR_HI EQU VARS+1
ADR_LO EQU VARS+2
DEV_ADR EQU VARS+3 ; A2, A1, A0
_N EQU VARS+4 ; used for I2C routines
O_BYTE EQU VARS+5
I_BYTE EQU VARS+6
LOOP1 EQU VARS+7 ; timing
LOOP2 EQU VARS+8 ; timing
IN_BYTE ; read byte on i2c bus
CLRF I_BYTE
MOVLW .8
MOVWF _N ; set index to 8
CALL HIGH_SDA ; be sure SDA is configured as input
IN_BIT
CALL HIGH_SCL ; clock high
BTFSS PORTB, SDA ; test SDA bit
GOTO IN_ZERO
GOTO IN_ONE
IN_ZERO
BCF STATUS, C ; clear any carry
RLF I_BYTE, F ; i_byte = i_byte << 1 | 0
GOTO CONT_IN
IN_ONE
BCF STATUS, C ; clear any carry
RLF I_BYTE, F
INCF I_BYTE, F ; i_byte = (i_byte << 1) | 1
GOTO CONT_IN
CONT_IN
CALL LOW_SCL ; bring clock low
DECFSZ _N, F ; decrement index
GOTO IN_BIT
RETURN
;;;;;;
OUT_BYTE: ; send o_byte on I2C bus
MOVLW .8
MOVWF _N
OUT_BIT:
BCF STATUS,C ; clear carry
RLF O_BYTE, F ; left shift, most sig bit is now in carry
BTFSS STATUS, C ; if one, send a one
GOTO OUT_ZERO
GOTO OUT_ONE
OUT_ZERO:
CALL LOW_SDA ; SDA at zero
CALL CLOCK_PULSE
CALL HIGH_SDA
GOTO OUT_CONT
OUT_ONE:
CALL HIGH_SDA ; SDA at logic one
CALL CLOCK_PULSE
GOTO OUT_CONT
OUT_CONT:
DECFSZ _N, F ; decrement index
GOTO OUT_BIT
RETURN
;;;;;;
NACK: ; bring SDA high and clock
CALL HIGH_SDA
CALL CLOCK_PULSE
RETURN
ACK:
CALL LOW_SDA
CALL CLOCK_PULSE
RETURN
START:
CALL LOW_SCL
CALL HIGH_SDA
CALL HIGH_SCL
CALL LOW_SDA ; bring SDA low while SCL is high
CALL LOW_SCL
RETURN
STOP:
CALL LOW_SCL
CALL LOW_SDA
CALL HIGH_SCL
CALL HIGH_SDA ; bring SDA high while SCL is high
CALL LOW_SCL
RETURN
CLOCK_PULSE: ; SCL momentarily to logic one
CALL HIGH_SCL
CALL LOW_SCL
RETURN
HIGH_SDA: ; high impedance by making SDA an input
BSF STATUS, RP0 ; bank 1
BSF TRISB, SDA ; make SDA pin an input
BCF STATUS, RP0 ; back to bank 0
CALL DELAY_SHORT
RETURN
LOW_SDA:
BCF PORTB, SDA
BSF STATUS, RP0 ; bank 1
BCF TRISB, SDA ; make SDA pin an output
BCF STATUS, RP0 ; back to bank 0
CALL DELAY_SHORT
RETURN
HIGH_SCL:
BSF STATUS, RP0 ; bank 1
BSF TRISB, SCL ; make SCL pin an input
BCF STATUS, RP0 ; back to bank 0
CALL DELAY_SHORT
RETURN
LOW_SCL:
BCF PORTB, SCL
BSF STATUS, RP0 ; bank 1
BCF TRISB, SCL ; make SCL pin an output
BCF STATUS, RP0 ; back to bank 0
CALL DELAY_SHORT
RETURN
DELAY_SHORT: ; provides nominal 25 usec delay
MOVLW .5
MOVWF LOOP2
DELAY_SHORT_1:
NOP
DECFSZ LOOP2, F
GOTO DELAY_SHORT_1
RETURN
DELAY_LONG
MOVLW .250 ; 250 msec delay
MOVWF LOOP1
DELAY_N_MS:
OUTTER
MOVLW .110 ; close to 1.0 msec delay when set to .110
MOVWF LOOP2
INNER
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOP2, F ; decrement and leave result in LOOP2
; skip next statement if zero
GOTO INNER
DECFSZ LOOP1, F
GOTO OUTTER
RETURN
et un peu de lecture :
**************************************************************************************
le minima en C (mikroC) I2C Hardware
exemple avec RTC DS1307
Code : Tout sélectionner
#define DS1307_ADDR 0xD0 // RTC DS1307
#define EEPROM_4K_ADR 0xA0 // EEPROM 24LC32
#define LCD_ADDR 0x4E // PCF8574 on pigboard YwRobot back located on LCD4x20
void write_ds1307(unsigned short address,unsigned short w_data) // I2C WRITE
{
I2C1_Start();
I2C1_Wr(0xD0);
I2C1_Wr(address);
I2C1_Wr(w_data);
I2C1_Stop();
}
unsigned short read_ds1307(unsigned short address) // I2C read subroutine
{unsigned short clock_data ;
I2C1_Start();
I2C1_Wr(0xD0);
I2C1_Wr(address);
I2C1_Repeated_Start();
I2C1_Wr(0xD1);
clock_data=I2C1_Rd(0);
I2C1_Stop();
return(clock_data);
}
void check_device(unsigned char dev_address)
{
I2C1_Start();
if (I2C1_Wr(dev_address))
{
sprintf(txt,"Device at adresse %02X is not found",(int)dev_address);
UART1_Write_Text(txt);
}
else
{
sprintf(txt,"Device at adresse %02X found OK",(int)dev_address);
UART1_Write_Text(txt);
}
I2C1_Stop();
CRLF();
}
ANSELC=0;
PORTC = 0x80; // RC0..RC5,RC7 = input RC6=Output
TRISC = 0xFF; /
.......
I2C1_Init(400000);
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
18f26k22 et module I2C
Bonjour à tous,
Une version ASM de dialogue I2C sur un 18F47Q10 dont le module MSSP semble identique à celui du 18F26K22.
Il faut vérifier si la sélection des banks registres est la même, et idem pour le mapping PPS.
viewtopic.php?p=16479#p16479
Une version ASM de dialogue I2C sur un 18F47Q10 dont le module MSSP semble identique à celui du 18F26K22.
Il faut vérifier si la sélection des banks registres est la même, et idem pour le mapping PPS.
viewtopic.php?p=16479#p16479
18f26k22 et module I2C
Le projet ASM complet, qui lit une eeprom 24C32, il pilote aussi l'uart, un lcd texte et une horloge DS1307.
Le hard ici, merci Pedro viewtopic.php?f=36&t=1122&p=16175#p16175
Le hard ici, merci Pedro viewtopic.php?f=36&t=1122&p=16175#p16175
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
18f26k22 et module I2C
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Bonsoir a tous
Pas facile de comprendre vos exemples en C , mais merci
j'ai trouvé un exemple en ASM sur le net
https://www.youtube.com/watch?v=8Kv0by_8SJE
Pour le fichier joint cela ressemble plus a ce que je connais
Pour Temps-x, la plus simple est d'utiliser une mémoire compatible Proteus type 24c32
Apres c'est pas compliqué de tester avec un autre module I2C et facile a comparer avec un programme sur un 16F
De souvenir il faut 2 adresses pour la 24c32
A +
Pas facile de comprendre vos exemples en C , mais merci
j'ai trouvé un exemple en ASM sur le net
https://www.youtube.com/watch?v=8Kv0by_8SJE
Pour le fichier joint cela ressemble plus a ce que je connais
Pour Temps-x, la plus simple est d'utiliser une mémoire compatible Proteus type 24c32
Apres c'est pas compliqué de tester avec un autre module I2C et facile a comparer avec un programme sur un 16F
De souvenir il faut 2 adresses pour la 24c32
A +
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
18f26k22 et module I2C
Bonsoir paulfjujo, satinas, francois77, et tout le forum,
Ok, on va faire avec
Il faut une seule adresse pour le cas d'une eeprom 24C32, et d'après la datasheet elle se définisse comme ceci
1010, A2,A1,A0,1 = lecture ou 0 = écriture
L'adresse fait en réalité 7 bits, si on ne compte pas le bit de lecture et écriture, on peut la changer en changeant les cavalier sur A0, A1, A2 en les mettant à VSS ou VDD
Voici les pins dédié à la configuration de l'adresse, que j'ai colorié
Ça te fait 8 adresses possible, la plus petite adresse sera : 0x50, et la plus grande 0x57
On se qui concerne l'adresse pas de soucis, car j'ai écrit un petit programme pour la rechercher automatiquement
Bon j'écris le petit programme, et je te le mets ici ce week-end
Regarde dans la documentation de satinas et paulfjujo, il y a des truc très intéressant de plus paulfjujo à fait l'effort de mettre de l'asm
A+
francois77 a écrit :Source du message Pour Temps-x, la plus simple est d'utiliser une mémoire compatible Proteus type 24c32
Ok, on va faire avec
francois77 a écrit :Source du message De souvenir il faut 2 adresses pour la 24c32
Il faut une seule adresse pour le cas d'une eeprom 24C32, et d'après la datasheet elle se définisse comme ceci
1010, A2,A1,A0,1 = lecture ou 0 = écriture
L'adresse fait en réalité 7 bits, si on ne compte pas le bit de lecture et écriture, on peut la changer en changeant les cavalier sur A0, A1, A2 en les mettant à VSS ou VDD
Voici les pins dédié à la configuration de l'adresse, que j'ai colorié
Ça te fait 8 adresses possible, la plus petite adresse sera : 0x50, et la plus grande 0x57
On se qui concerne l'adresse pas de soucis, car j'ai écrit un petit programme pour la rechercher automatiquement
Bon j'écris le petit programme, et je te le mets ici ce week-end
Regarde dans la documentation de satinas et paulfjujo, il y a des truc très intéressant de plus paulfjujo à fait l'effort de mettre de l'asm
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
18f26k22 et module I2C
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Bonjour Temps-x et tout le forum
Pas la peine de passer du temps sur ce sujet, j'ai maintenant toute les infos pour faire (enfin j'espère).
j'ai fait un petit test hier et mon module I2c parle correctement , il me reste a remettre tout cela en ordre
C'est comme pour un écran, a partir du moment ou tu affiche un point , tu sais piloter un écran
je ne programme pas a ta vitesse, mais j'arrive a avoir quelques résultats
La suite dans la journée si tout va bien
A+
Francois
Pas la peine de passer du temps sur ce sujet, j'ai maintenant toute les infos pour faire (enfin j'espère).
j'ai fait un petit test hier et mon module I2c parle correctement , il me reste a remettre tout cela en ordre
C'est comme pour un écran, a partir du moment ou tu affiche un point , tu sais piloter un écran
je ne programme pas a ta vitesse, mais j'arrive a avoir quelques résultats
La suite dans la journée si tout va bien
A+
Francois
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Roger et 52 invités