Bonjour,
Est ce que quelqu'un utilise ce compilateur? http://www.mikroe.com/mikrobasic/pic/
J'ai un petit problème avec la liaison SPI.
Au plaisir de vous lire.
-----
Bonjour,
Est ce que quelqu'un utilise ce compilateur? http://www.mikroe.com/mikrobasic/pic/
J'ai un petit problème avec la liaison SPI.
Au plaisir de vous lire.
Bonjour, j'ai utilisé SPI_Ethernet dans un projet de mini serveur Web avec un PIC 18F452.
Quel est ta question ?
J'utilise le WS2801 https://www.adafruit.com/datasheets/WS2801.pdf, j'en ai chainé 4 et quand j'écris
Ca ne fonctionne pas comme attendu.Code:'************************************************************* ' S/P TRANSFERT '************************************************************* SUB PROCEDURE TRANSFERT SPI1_WRITE (R_1) SPI1_WRITE (G_1) SPI1_WRITE (B_1) SPI1_WRITE (R_2) SPI1_WRITE (G_2) SPI1_WRITE (B_2) SPI1_WRITE (R_3) SPI1_WRITE (G_3) SPI1_WRITE (B_3) SPI1_WRITE (R_4) SPI1_WRITE (G_4) SPI1_WRITE (B_4) END SUB '************************************************************* ' S/P BLEU '************************************************************* SUB PROCEDURE BLEU R_1 = 0 G_1 = 0 B_1 = 255 R_2 = 0 G_2 = 0 B_2 = 255 R_3 = 0 G_3 = 0 B_3 = 255 R_4 = 0 G_4 = 0 B_4 = 255 TRANSFERT Delay_MS (10) END SUB '************************************************************* ' S/P ROUGE '************************************************************* SUB PROCEDURE ROUGE R_1 = 255 G_1 = 0 B_1 = 0 R_2 = 255 G_2 = 0 B_2 = 0 R_3 = 255 G_3 = 0 B_3 = 0 R_4 = 255 G_4 = 0 B_4 = 0 TRANSFERT Delay_MS (10) END SUB Main program ADCON0 = 0 PORTA = 0 PORTB = 0 INTCON = 0 ADCON1 = 7 OSCCON = %01110100 ANSEL = 0 TRISA = %00000000 TRISB = %00000010 SPI1_INIT () DEBUT: for K = 0 to 4 PORTB.B3 = 0 DELAY_MS (200) PORTB.B3 = 1 DELAY_MS (200) next K BLEU DELAY_MS (500) ROUGE DELAY_MS (500) GOTO DEBUT
Les variables R_1 à B_4 sont déclarées comme byte.
Sur RB3 est branché une LED témoin pour voir si le programme tourne.
Si je limite la procédure transfert aux 6 premières lignes, ça fonctionne.
Ce code ne peut pas être compilé, il manque Main: (Main program crée une erreur)
Poste ton code complet, ton schéma et indique quel PIC tu utilises.
Ci-dessus le code complet.Code:program WS2801_MIKRO '-------- 'TEST SPI '-------- ' Declarations section Symbol DATA_SPI = PORTB.B5 Symbol CLK_SPI = PORTB.B4 Dim R_1, G_1, B_1, K As Byte Dim R_2 As Byte Dim G_2 As Byte Dim B_2 As Byte Dim R_3 As Byte Dim G_3 As Byte Dim B_3 As Byte Dim R_4 As Byte Dim G_4 As Byte Dim B_4 As Byte '************************************************************* ' S/P TRANSFERT '************************************************************* SUB PROCEDURE TRANSFERT () SPI1_WRITE (R_1) SPI1_WRITE (G_1) SPI1_WRITE (B_1) SPI1_WRITE (R_2) SPI1_WRITE (G_2) SPI1_WRITE (B_2) SPI1_WRITE (R_3) SPI1_WRITE (G_3) SPI1_WRITE (B_3) SPI1_WRITE (R_4) SPI1_WRITE (G_4) SPI1_WRITE (B_4) END SUB '************************************************************* ' S/P BLEU '************************************************************* SUB PROCEDURE BLEU () R_1 = 0 G_1 = 0 B_1 = 255 R_2 = 0 G_2 = 0 B_2 = 255 R_3 = 0 G_3 = 0 B_3 = 255 R_4 = 0 G_4 = 0 B_4 = 255 TRANSFERT Delay_MS (10) END SUB '************************************************************* ' S/P ROUGE '************************************************************* SUB PROCEDURE ROUGE () R_1 = 255 G_1 = 0 B_1 = 0 R_2 = 255 G_2 = 0 B_2 = 0 R_3 = 255 G_3 = 0 B_3 = 0 R_4 = 255 G_4 = 0 B_4 = 0 TRANSFERT Delay_MS (10) END SUB '************************************************************* ' S/P RIEN '************************************************************* SUB PROCEDURE RIEN () R_1 = 0 G_1 = 0 B_1 = 0 R_2 = 0 G_2 = 0 B_2 = 0 R_3 = 0 G_3 = 0 B_3 = 0 R_4 = 0 G_4 = 0 B_4 = 0 TRANSFERT Delay_MS (10) END SUB '************************************************************* main: ' Main program ADCON0 = 0 PORTA = 0 PORTB = 0 INTCON = 0 ADCON1 = 7 OSCCON = %01110100 ANSEL = 0 TRISA = %00000000 TRISB = %00000010 SPI1_INIT () DEBUT: for K = 0 to 4 PORTB.B3 = 0 DELAY_MS (200) PORTB.B3 = 1 DELAY_MS (200) next K BLEU DELAY_MS (500) RIEN DELAY_MS (500) ROUGE DELAY_MS (500) RIEN DELAY_MS (500) GOTO DEBUT end.
PIC 16F88, oscillateur interne.
Je n'ai pas fait de schéma, les liaisons :
du PIC DATA et CLK vers SDI et CKI du 1et WS
du 1er WS vers le 2e SDO et CKO vers SDI et CKI
tel que dans la doc.
https://www.adafruit.com/datasheets/WS2801.pdf
Je ne suis pas certain que OSCCON bit0 et 1 sont bien configurés ?
Ne faut il pas mettre 10 au lieu de 00 pour RC interne.
SCS<1:0>: Oscillator Mode Select bits
00 = Oscillator mode defined by FOSC<2:0>
01 = T1OSC is used for system clock
10 = Internal RC is used for system clock
11 = Reserved
Dans les bit de config :
INTRCoscillator;CLKOfunctionon RA6/OSC2/CLKOpinandportI/OfunctiononRA7/OSC1/CLKIpin
Ceci me permet de vérifier la fréquence d'oscillation