Skyduino:~#
Articles
pic ccs, programmation, projet

[PIC CCS] Affichage sur 7 segments multiplexé

Bonjour à tous !

Il y a déja quelque temps j’avais en tête de faire un « backpack » série pour un afficheur 7 segments multiplexé.

Cela fait maintenant un mois que j’avais ce projet dans ma boite de chose à finir, j’ai pris le temps cette aprés midi de faire un peu de code pour ce projet.
(Je pouvais pas faire le tutoriel arduino prévu pour ceux week-end à cause de travaux chez moi …)

Bon déja il y avais une erreur dans mon typon deux pattes était relié ensemble alors qu’elle ne devait pas, un coups de cutter et le problème fut réglé.

Le problème c’est que il y a un mois quand j’avais fait le schéma, j’avais utilisé des PIC16F84A histoire de m’en débarrasser … grosse erreur, pas de UART, pas de SSP, en gros rien !
Je vais donc revoir mon systéme avec des ATtiny2313, comme c’est un DIP20 et non un DIP18 je vais avoir deux sorties supplémentaire, par conséquent je vais pouvoir géré le point décimal.
Je vais aussi mettre les résistances de limitation de courant sur le pcb au lieu de faire un truc dégueulasse avec des résistances soudé « en l’air ».

Je n’est plus le schémas malheureusement (problème de sauvegarde, …) en gros :
Pour le transfert de données :
A4 - data
B0 - clock

Et pour le contrôle des digits :
A0 - digit 4
A1 - digit 3
A2 - digit 2
A3 - digit 1
B1 - segment E
B2 - segment D
B3 - segment C
B4 - segment B
B5 - segment A
B6 - segment F
B7 - segment G

Ne pas oublier de mettre des résistances de limitation de courant sur chaque segments, j’ai mis 7 résistances de 270 ohms.
L’afficheur est un afficheur 7 segments, 4 digit, à cathode commune.
Le PIC16F84A tourne avec un quartz à 4MHz.

Et voici le code que j’ai fait (attention l’affichage multiplexé marche mais le SPI software est complétement buggé).

Remarque: je fourni le code a titre d’exemple mais il n’est pas utilisable dans un projet telle quelle !

// Include for PIC16F84A
#include "16F84A.h"

// Fuses/Crystal and delay configuration
#use delay (clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT

// Manual TRISx gestion
#use fast_io (A)
#use fast_io (B)

volatile int8 index = 0; // Index of current bit for binary reception
volatile int32 numbers = 0xFFFF; // Printable numbers on the 4 digits

// Decimal to Digit table, 0 ~9 - _ 
const int digits[16] = {126, 24, 182, 188, 216, 236, 238, 56, 254, 252, 128, 4, 4, 4, 4, 4};

#INT_EXT
void getBit() // Software SPI interruption function
{
   if(index == 16) index = 0;

   if(input(PIN_A4)) // Check bit 
      bit_set(numbers, index);
   else
      bit_clear(numbers, index);

   index++;
}

// Main function
void main()
{
   set_tris_A(16); // A4 as input
   set_tris_B(1); // B0 as input1
   port_b_pullups(1); // pull-up resistor on B0

   enable_interrupts(INT_EXT); // External interrupt on B0
   ext_int_edge( H_TO_L ); // Interrupt on FALLING edge
   enable_interrupts(GLOBAL); // Enable interrupts

   for(;;) // Infinite display processing
   {
      output_a(7); // Select digit 1
      output_b(digits[numbers & 0xF] & 0xFE); // Display digit 
      delay_ms(1); // 1/4 200Hz refresh delay

      output_a(11); // Select digit 2
      output_b(digits[(numbers & 0xF0) >> 4] & 0xFE); // Display digit 2
      delay_ms(1); // 2/4 200Hz refresh delay

      output_a(13); // Select digit 3
      output_b(digits[(numbers & 0xF00) >> 8] & 0xFE); // Display digit 3
      delay_ms(1); // 3/4 200Hz refresh delay

      output_a(14); // Select digit 4
      output_b(digits[(numbers & 0xF000) >> 12] & 0xFE); // Display digit 4
      delay_ms(2); // 4/4 200Hz refresh delay
   }
}

Discussion

Pas encore de commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.