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 ---
Bluetooth Electronics et envoi de texte
Bluetooth Electronics et envoi de texte
Bluetooth Electronics et envoi de texte
Bluetooth Electronics et envoi de texte
Good job Gérard
Bonne continuation.
@++
Bonne continuation.
@++
Bluetooth Electronics et envoi de texte
- Gérard
Expert- Messages : 1640
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Fin de l'euphorie, l'I2C ne veut pas.
C'est simple mais ne fonctionne pas.
Dans le main :
Quand je compile, il m'ouvre un fichier de plus de 2300 lignes qui s'appelle : module __Lib_TFT_16bit_Defs
C'est quoi ce truc?
Code : Tout sélectionner
SUB PROCEDURE INIT_RTC()
I2C_Start()
I2C2_Wr(%11010000) 'adr RTC
I2C2_Wr(14) 'CTRL
I2C2_Wr(0)
I2C2_Wr(0)
I2C2_Stop
Delay_ms (100)
end sub
C'est simple mais ne fonctionne pas.
Dans le main :
Code : Tout sélectionner
I2C2_INIT(100000) '
INIT_RTC()
...
Quand je compile, il m'ouvre un fichier de plus de 2300 lignes qui s'appelle : module __Lib_TFT_16bit_Defs
C'est quoi ce truc?
Bluetooth Electronics et envoi de texte
Bonjour Gérard,
Dans Library manager, décoche toute les lignes TFT.
Un exemple comment je lis le module RTC DS3231 en MikroBasic avec un PIC 18F2520 en Soft I2C:
1/ Je commence par déclarer l'I2C:
Dans le Main on fait l'init.
Exemple de lecture dans la RTC:
Dans Library manager, décoche toute les lignes TFT.
Un exemple comment je lis le module RTC DS3231 en MikroBasic avec un PIC 18F2520 en Soft I2C:
1/ Je commence par déclarer l'I2C:
Code : Tout sélectionner
‘Déclaration Soft_I2C
dim Soft_I2C_Scl as sbit at RC3_bit
Soft_I2C_Sda as sbit at RC4_bit
Soft_I2C_Scl_Direction as sbit at TRISC3_bit
Soft_I2C_Sda_Direction as sbit at TRISC4_bit
Dans le Main on fait l'init.
Code : Tout sélectionner
I2C1_Init(100000) 'Init Soft I2C (dans le Main)
Exemple de lecture dans la RTC:
Code : Tout sélectionner
sub procedure Lecture_Date_Heure()
I2C1_Start() ' Issue start signal
I2C1_Wr(0xD0) ' Addresse RTC ' RTC DS3231
I2C1_wr(0) ' Start à l'adresse 0
I2C1_Start() ' start
I2C1_wr(0xD1) ' Addresse de lecture
seconds = I2C1_Rd(1) ' Read seconde byte
minutes = I2C1_Rd(1) ' Read minute byte
hours = I2C1_Rd(1) ' Read heure byte
Njs = I2C1_Rd(1) ' Read N° jour byte
_day = I2C1_Rd(1) ' Read jour
_month = I2C1_Rd(1) ' Read N° jour/mois byte}
Yb = I2C1_Rd(0) ' Read dizaine unité année byte
Yh = 32 'Millier et centaine année ( 32 = $20)
I2C1_Stop() ' Issue stop signal}
end sub
Bluetooth Electronics et envoi de texte
Bluetooth Electronics et envoi de texte
Et ça sert à quoi ces librairies TFT?
Concerne les TFT Displays.
https://www.mikroe.com/accessories/disp ... t-displays
Tu peux t'inspirer du programme ci-dessous.
Pour l'utiliser il faut:
Mettre à jour cette ligne: Rec = "---03-06-20-11-04-00-4" 'Mise à jour RTC
Une fois la mise à jour effectuée, tu peux commenter cette ligne: SetRtc()
Code : Tout sélectionner
program TestRtc_DS3231
'PIC 18F2520 Q=8MHz
dim Rec as string[22]
secondStr, minuteStr, hourStr, dayStr, monthStr, YbStr as string[3]
Sj,Sm,Sh,Sn,Sx,Sa,Snj,_Yh11,_Yb11, Ver , Btp as byte
seconds, minutes, hours, _day, _month, year, Yb,Yh, _Yh, _Yb,Njs as byte
dim Soft_I2C_Scl as sbit at RC3_bit
Soft_I2C_Sda as sbit at RC4_bit
Soft_I2C_Scl_Direction as sbit at TRISC3_bit
Soft_I2C_Sda_Direction as sbit at TRISC4_bit
'Lcd module connections
dim LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit
'_______________________________________________________________________________
sub procedure SetRtc()
Lcd_Cmd(_LCD_CLEAR)
'Decode trame de mise à jour reçue
Sj = Dec2Bcd(Strtoword(Rec[3]+Rec[4])) 'Jour
Sm = Dec2Bcd(Strtoword(Rec[6]+Rec[7])) 'Mois
Sh = Dec2Bcd(Strtoword(Rec[12]+Rec[13])) 'Heure
Sn = Dec2Bcd(Strtoword(Rec[15]+Rec[16])) 'Minute
Sx = Dec2Bcd(Strtoword(Rec[18]+Rec[19])) 'Seconde
Snj=Dec2Bcd(Strtoword(" "+Rec[21])) 'N° jour
_Yb11= Dec2Bcd(Strtoword(Rec[9]+Rec[10])) 'An DU adr $11
_Yh11= Dec2Bcd(Strtoword(" 20")) 'An MC adr $10
Delay_ms(100)
I2C1_Start() ' Start
I2C1_wr(0xD0) ' Addresse écriture RTC
I2C1_wr(0) ' Start addresse 0
I2C1_wr(Sx) ' Write Ss à l'adresse 2 contenant les secondes
I2C1_wr(Sn) ' Write Sn à l'adresse 3 contenant les minutes
I2C1_wr(Sh) ' Write Sh à l'adresse 4 contenant les heures
I2C1_wr(Snj) ' Write N° jour
I2C1_wr(Sj) ' Write Sj à l'adresse 5 contenant les Jour
I2C1_wr(Sm) ' Write Sm à l'adresse 6 contenant les mois
I2C1_wr(_Yb11) ' Write An (dizaine unité)
I2C1_wr($90) '
I2C1_Stop() ' stop signal
delay_ms(500)
end sub
'_______________________________________________________________________________
sub procedure Lecture_Date_Heure()
I2C1_Start() ' Issue start signal
I2C1_Wr(0xD0) ' Addresse RTC
I2C1_wr(0) ' Start à l'adresse 0
I2C1_Start() ' start
I2C1_wr(0xD1) ' Addresse de lecture
seconds = I2C1_Rd(1) ' Read seconde byte
minutes = I2C1_Rd(1) ' Read minute byte
hours = I2C1_Rd(1) ' Read heure byte
Njs = I2C1_Rd(1) ' Read N° jour byte
_day = I2C1_Rd(1) ' Read jour
_month = I2C1_Rd(1) ' Read N° jour/mois byte}
Yb = I2C1_Rd(0) ' Read dizaine unité an byte
Yh = 32 ' 32 = $20
I2C1_Stop() ' Issue stop signal}
end sub
'_______________________________________________________________________________
sub procedure ConvByteToString()
ByteToStr(seconds, secondStr)
Ltrim(secondStr)
if StrLen(secondStr) = 1 then secondStr = chr(48) + secondStr end if
bytetostr(minutes, minuteStr)
Ltrim(minuteStr)
if StrLen(minuteStr) = 1 then minuteStr = chr(48) + minuteStr end if
bytetostr(hours, hourStr)
Ltrim(hourStr)
if StrLen(hourStr) = 1 then hourStr = chr(48) + hourStr end if
bytetostr(_day, dayStr)
Ltrim(dayStr)
if StrLen(dayStr) = 1 then dayStr = chr(48) + dayStr end if
bytetostr(_month, monthStr)
Ltrim(monthStr)
if StrLen(monthStr) = 1 then monthStr = chr(48) + monthStr end if
bytetostr(_Yb, YbStr)
Ltrim(YbStr)
if StrLen(YbStr) = 1 then YbStr = chr(48) + YbStr end if
'DatTimStr = dayStr + "/" + monthStr + "/20" + YbStr + " - " + hourStr + ":" + minuteStr + ":" + secondStr
end sub
'_______________________________________________________________________________
sub procedure Formatage_Date_Heure()
seconds = ((seconds and 0x70) >> 4)*10 + (seconds and 0x0F)
minutes = ((minutes and 0xF0) >> 4)*10 + (minutes and 0x0F)
hours = ((hours and 0x30) >> 4)*10 + (hours and 0x0F)
Njs = Njs and $07 _day = ((_day and 0x30) >> 4)*10 + (_day and 0x0F)
_month = ((_month and 0x10) >> 4)*10 + (_month and 0x0F)
_Yh = ((Yh and 0xF0)>> 4)*10 + (Yh and 0x0F )
_Yb = ((Yb and 0xF0)>> 4)*10 + (Yb and 0x0F )
end sub
'_______________________________________________________________________________
sub procedure Affiche_Date_Heure()
Lcd_Chr(1, 1, (_day / 10) + 48) 'Jour dizaine
Lcd_Chr(1, 2, (_day mod 10) + 48) 'Jour unité
Lcd_Out(1,3,"/")
Lcd_Chr(1,4, (_month / 10) + 48) 'Mois dizaine
Lcd_Chr(1,5, (_month mod 10) + 48) 'Mois unité
Lcd_Out(1,6,"/")
Lcd_Chr(1,7, (_Yh / 10) + 48) 'Année millier
Lcd_Chr(1,8, (_Yh mod 10) + 48) 'Année centaine
Lcd_Chr(1,9, (_Yb / 10) + 48) 'Année dizaine
Lcd_Chr(1,10, (_Yb mod 10) + 48) 'Année unité
Lcd_Chr(2, 1, (hours / 10) + 48) 'Heure dizaine
Lcd_Chr(2, 2, (hours mod 10) + 48)'Heure unité
Lcd_Out(2,3,":")
Lcd_Chr(2,4, (minutes / 10) + 48) 'Minute dizaine
Lcd_Chr(2,5, (minutes mod 10) + 48) 'Minute unité
Lcd_Out(2,6,":")
Lcd_Chr(2,7, (seconds / 10) + 48) 'Seconde dizaine
Lcd_Chr(2,8, (seconds mod 10) + 48) 'Seconde unité
Lcd_Chr(2,10, (Njs mod 10) + 48) 'N° jour
end sub
'_______________________________________________________________________________
main:
I2C1_Init(100000) 'Init Soft I2C
PIE1.RCIE = 1
Adcon1 = $0F 'Configure AN pins as digital I/ 'ConfigureLocalData
PORTA = 0
PORTB = 0
PORTC = 0
Lcd_Init() 'Init Lcd
Lcd_Cmd(_LCD_TURN_ON)
Lcd_Cmd(_LCD_CLEAR) 'Clear Lcd display
Lcd_Cmd(_LCD_CURSOR_OFF) 'cursor off
LCD_OUT(1,1,"TEST RTC DS3231 ")
delay_ms(3000)
' " jj mm yy hh mn ss n"
Rec = "---03-06-20-11-04-00-4" 'Mise à jour RTC
SetRtc() 'commenter cette ligne après la mise à jour. <---------------------------------------------------------------
'===============================================================================
while true
'Lecture RTC, formatage et affichage date time______________________________
Lecture_Date_Heure() 'Lecture dans RTC
Formatage_Date_Heure() 'Formatage date et heure
Affiche_Date_Heure() 'Affiche date heure
delay_ms(500)
wend
end.
Bluetooth Electronics et envoi de texte
Ligne à ajouter au code précédent : Lcd_Cmd(_LCD_CLEAR)
.
Code : Tout sélectionner
LCD_OUT(1,1,"TEST RTC DS3231 ")
delay_ms(3000)
Lcd_Cmd(_LCD_CLEAR) ' Ligne à ajouter.
' " jj mm yy hh mn ss n"
Rec = "---03-06-20-11-32-00-4" 'Mise à jour RTC
' SetRtc() 'Decommenter pour mettre à jour.
'===============================================================================
while true
Bluetooth Electronics et envoi de texte
- Gérard
Expert- Messages : 1640
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Je me pose une question:
pourquoi dans les lignes I2C1_Rd(1), il y a 1 entre parenthèses?
Code : Tout sélectionner
sub procedure Lecture_Date_Heure()
I2C1_Start() ' Issue start signal
I2C1_Wr(0xD0) ' Addresse RTC
I2C1_wr(0) ' Start à l'adresse 0
I2C1_Start() ' start
I2C1_wr(0xD1) ' Addresse de lecture
seconds = I2C1_Rd(1) ' Read seconde byte
minutes = I2C1_Rd(1) ' Read minute byte
hours = I2C1_Rd(1) ' Read heure byte
Njs = I2C1_Rd(1) ' Read N° jour byte
_day = I2C1_Rd(1) ' Read jour
_month = I2C1_Rd(1) ' Read N° jour/mois byte}
Yb = I2C1_Rd(0) ' Read dizaine unité an byte
Yh = 32 ' 32 = $20
I2C1_Stop() ' Issue stop signal}
end sub
pourquoi dans les lignes I2C1_Rd(1), il y a 1 entre parenthèses?
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités