Oppure

Loading
28/12/11 10:17
el cuba libre
ciao
premetto che gran parte del codice è stata scritta dal mio professore e io devo modificare il codice che lui ha scritto di modo io possa decidere la frequenza prima di entrare nel for.
è il primo programma che mi trovo a dover scrivere per microcontrollori, in questo caso parliamo di un AVR butterfly.
ho studiato studiato i datasheets e la use guide della butterfly, li ho capiti abbastanza ma sono bloccato con il codice da scrivere. leggendo la user guide ho visto che il pin che mi dice se il joystick è premuto oppure no è il PB4, o almeno cosi ho capito!
codice:
#include "avr/io.h"		    // include le define delle periferiche AVR
#include "BFinit.h"		    // routine di inizializzazione della Butterfly
#include "conversion.h"		// routine di conversione da numero a stringa
#include "LCD_simple.h"		// gestione del display della Butterfly
#include "avr/interrupt.h"	// avrlib define per usare gli interrupt
int main( void )
{
	uint16_t f;	// frequenza in Hz
	char str[5];
	BFinit(); 	// inizializzazione Butterfly
	LCD_Init();	// iniz. display
	TCCR1A = 0x40;	// iniz. timer per generare onda quadra
	TCCR1B = 0x09;
	DDRB |= (1<<5);	// il pin 5 della porta B è un'uscita
	OCR1A = 1136;	// imposta la freq iniziale sul timer
	sei();	// abilita il flag globale degli interrupt (global interrupt enable nella CPU) vedi cli();
	DDRB |=(0<<4);//ingresso,mette a 0 il pin 4 che dovrebbe essere il pin per la pressione del joystick
	PORTB |=(1<<4);// attiva la r di pull UP
	f=10000;
	ByteTo2Char(f/1000, str );
	ByteTo2Char((f%1000)/10, str+2 );
        str[4]=0;
	LCD_puts(str,0);//stampa mille a video.
	for(;;)	// ciclo infinito: per sempre fai quel simpatico fischetto che solo tu sai fare
	{
	   while(PB4!=1)// quando percepisce che il tasto è premuto
	  {// non esegue il programma fino alla possima commutazione di stato 
	    for( f=440; f<20000; f+=100 )
		{
			uint16_t ocr = (uint16_t)((uint32_t)(F_CPU)/(2*f));
			OCR1A = ocr;
			Delay(100);
			ByteTo2Char(f/1000, str );
			ByteTo2Char((f%1000)/10, str+2 );
			str[4]=0;
			LCD_puts( str, 0 );
		}
	  }
	}
}



il programma stampa 1000 su l'LCD della butterfly, io a questo punto con il joystick devo essere in grado di modificare questo valore, per esempio se pigio su si deve devo stampara 1010, se pigio giù 9090 e cosi via,solo che non riesco a capire come viene mosso il joystick, premendolo non succede assolutamente niente e non riesco a capire perché.
ci sto smattando( oltretutto il rumorino che emette quando lo provo non è rilassante XD)
grazie
Ultima modifica effettuata da el cuba libre 28/12/11 10:19
aaa
29/12/11 16:59
anthony015
il cross-posting non è molto gradito...
aaa