PIC16F1829 problema con numeri random
Inviato: 1 giu 2015, 12:24
Innanzitutto mi presento sono Nicola è un piacere entrare a far parte del forum. Ho un problema per quanto riguarda i numeri random con il PIC16F1829. A casa dispongo di un pickit3 con la demoboard Low Pin Count che desidererei utilizzare per realizzare un gioco con i led, ora posto lo schema
Il gioco che vorrei fare è un classico quello dei led che si accendono in maniera casuale e i pulsanti che servono per verificare se hai memorizzato correttamente la sequenza.
Per prima cosa vorrei che si accendesse un led alla volta in maniera casuale tra quelli qui sopra proposti, si dovrebbero accendere 3 led in totale. Ho già provato a scrivere il codice più volte ma ottenendo scarsi risulati, perché inizialmente si accendono due o tre led più o meno bene e poi c'è la sequenza dei tre led che a me occorre. Ecco io vorrei chiedervi se questo problema iniziale è dovuto al codice che ho scritto.
Ecco di seguito il codice:
(Ho provato a usare anche srand(time(NULL)) includendo la libreria time.h però anche in questo caso i risultati non erano nei migliori).
Questa è solo una parte del mio programma se desiderate lo copio tutto e se desiderate altre informazioni chiedete pure.
Grazie mille in anticipo
Il gioco che vorrei fare è un classico quello dei led che si accendono in maniera casuale e i pulsanti che servono per verificare se hai memorizzato correttamente la sequenza.
Per prima cosa vorrei che si accendesse un led alla volta in maniera casuale tra quelli qui sopra proposti, si dovrebbero accendere 3 led in totale. Ho già provato a scrivere il codice più volte ma ottenendo scarsi risulati, perché inizialmente si accendono due o tre led più o meno bene e poi c'è la sequenza dei tre led che a me occorre. Ecco io vorrei chiedervi se questo problema iniziale è dovuto al codice che ho scritto.
Ecco di seguito il codice:
- Codice: Seleziona tutto
// PIC16F1829 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
// CONFIG2
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = OFF
#pragma config BORV = LO
#pragma config LVP = OFF
#include <stdlib.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000 //Definisco la frequenza di lavoro non quella del clock
int cont = 3;
int i; //Variabile per il numero casuale
int contLed = 0; int contPuls = 0; int controllo = 0; //Variabili contatori per i cicli
int led[] = {1,2,4}; //Vettore che imdica quale led deve lampeggiare
void delayMS(unsigned int count); //Funzione per il ritardo espressa in ms
void main(void) {
TRISA = 0b11111111; //Imposto i pin come INPUT = 1 o OUTPUT = 0
TRISB = 0b11111111;
TRISC = 0b11111000;
OSCCON = 0b01111010; //Clock interno impostato su 16MHZ
ANSELA = 0b00000000; //Imposto i pin come digitali
PORTC = 0b00000000;
delayMS(500);
while(1){ //Ciclo infinito dove si andrà a scrivere il programma
while(contLed < cont){ //Ciclo che memorizza i led acccesi in sequenza
i = rand() % 3;
PORTC = led[i];
delayMS(300);
PORTC = 0b00000000;
delayMS(300);
contLed = contLed + 1;
}
}
}
void delayMS(unsigned int count){
while(count-- !=0){
__delay_us(1000);
}
}
(Ho provato a usare anche srand(time(NULL)) includendo la libreria time.h però anche in questo caso i risultati non erano nei migliori).
Questa è solo una parte del mio programma se desiderate lo copio tutto e se desiderate altre informazioni chiedete pure.
Grazie mille in anticipo