Ciao a tutti!
Sto provando a configurare un sensore ultrasuoni (HC-SR04) con un Attiny 85...il problema è che non funziona...ho provato quanto scritto a questo link http://www.instructables.com/id/Ultrasonic-Range-Finder-with-an-ATtiny85/step5/The-Code/ però non funziona..cioè il led si accende da solo..e non si spegne più.
Allora ho provato a vedere se il sensore funziona...semplicemente collegando in parallelo ai segnali di trig ed echo dei led che ne mostrino il funzionamento. A quel punto mando il segnale di trig...e tutto funziona bene: cioè il led del trig si accende tot volte al secondo, e il led echo risponde rimanendo acceso un tempo variabile a seconda della distanza dell'oggetto davanti al sensore.
ora però se inserisco nello sketch il semplice comando di pulseIn(), l'intervallo di accensione dei led passa da qualche volta al secondo a una volta ogni 4 secondi! è come se il microcontrollore si incantasse all'esecuzione di pulseIn()
cicca_lo:
.....
ora però se inserisco nello sketch il semplice comando di pulseIn(), l'intervallo di accensione dei led passa da qualche volta al secondo a una volta ogni 4 secondi! è come se il microcontrollore si incantasse all'esecuzione di pulseIn()
Non è che il microcontrollore si incanta, è che la pulseIn() ferma effettivamente l'esecusione del tuo programma sino a quando non ha terminato la lettura (... o va in time out). E' chiaramente scritto della descrizione :
"Reads a pulse (either HIGH or LOW) on a pin. For example, if value is HIGH, pulseIn() waits for the pin to go HIGH, starts timing, then waits for the pin to go LOW and stops timing. Returns the length of the pulse in microseconds. Gives up and returns 0 if no pulse starts within a specified time out."
L'IDE liscio, quello scaricato dal sito, in tutte le sue versioni, non ha il codice necessario per compilare per i microcontrollori della serie Tiny.
Quindi, tra le varie operazioni che hai fatto, una di queste e stata sicuramente quella di scaricare un core per i tiny e integrarlo nell'IDE che stai usando.
Siccome ce ne sono diversi su internet, volevo sapere quale hai scaricato. Perché, volendoti aiutare, ho necessita di sapere quale codice stai usando.
Potrebbe essere che la pulse() sia stata implementata in modo diverso a seconda del core scaricato. Magari manca il timeout.
Non so come, ma il problema era solo la frequenza di clock dell'attiny....praticamente l'ho impostato a 16 Mhz PLL ed ha funzionato tutto alla meraviglia!
Se vi interessa ecco il codice per comandare un led con il solo passaggio della mano sul sensore ad ultrasuoni...programmato per attiny e funziona alla grande! Grazie a tutti!
#define trig 3
#define echo 4
#define led 1
int temp=0;
int dist=0;
int pwm=0;
int prec=0;
int massimo=60;
int caso=0;
boolean acceso=false;
void setup(){
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
pinMode(led,OUTPUT);
}
void loop(){
digitalWrite(trig,HIGH);
delay(10);
digitalWrite(trig,LOW);
temp=pulseIn(echo,HIGH);
dist=temp/58;
if(dist!=0){
if (dist<massimo){
if(acceso){
if(prec==0){
prec=1;
delay(300);
}
else{
pwm=(dist*255)/massimo;
analogWrite(led,pwm);
prec=2;
}
}
else{
analogWrite(led,128);
acceso=true;
delay(500);
}
}
else{
if(prec==1){
analogWrite(led,0);
prec=0;
acceso=false;
}
else {
if(prec==2){
prec=0;
delay(500);
}
}
}
}
delay(100);
}
Il problema non può essere solo la frequenza a 16 MHz. Il tuo codice non contiene nulla di "strano", dovrebbe poter lavorare anche a clock inferiori.
Sicuro di aver impostato il micro (i suoi fuse) correttamente prima di flasharci lo sketch?