Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - prendere in input movimento joystick su microcontrollore AVR butterfly
Forum - C/C++ - prendere in input movimento joystick su microcontrollore AVR butterfly

Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 11:17
Mercoledì, 28/12/2011
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:
Codice sorgente - presumibilmente C++

  1. #include "avr/io.h"                 // include le define delle periferiche AVR
  2. #include "BFinit.h"                 // routine di inizializzazione della Butterfly
  3. #include "conversion.h"         // routine di conversione da numero a stringa
  4. #include "LCD_simple.h"         // gestione del display della Butterfly
  5. #include "avr/interrupt.h"      // avrlib define per usare gli interrupt
  6. int main( void )
  7. {
  8.         uint16_t f;     // frequenza in Hz
  9.         char str[5];
  10.         BFinit();       // inizializzazione Butterfly
  11.         LCD_Init();     // iniz. display
  12.         TCCR1A = 0x40;  // iniz. timer per generare onda quadra
  13.         TCCR1B = 0x09;
  14.         DDRB |= (1<<5); // il pin 5 della porta B è un'uscita
  15.         OCR1A = 1136;   // imposta la freq iniziale sul timer
  16.         sei();  // abilita il flag globale degli interrupt (global interrupt enable nella CPU) vedi cli();
  17.         DDRB |=(0<<4);//ingresso,mette a 0 il pin 4 che dovrebbe essere il pin per la pressione del joystick
  18.         PORTB |=(1<<4);// attiva la r di pull UP
  19.         f=10000;
  20.         ByteTo2Char(f/1000, str );
  21.         ByteTo2Char((f%1000)/10, str+2 );
  22.         str[4]=0;
  23.         LCD_puts(str,0);//stampa mille a video.
  24.         for(;;) // ciclo infinito: per sempre fai quel simpatico fischetto che solo tu sai fare
  25.         {
  26.            while(PB4!=1)// quando percepisce che il tasto è premuto
  27.           {// non esegue il programma fino alla possima commutazione di stato
  28.             for( f=440; f<20000; f+=100 )
  29.                 {
  30.                         uint16_t ocr = (uint16_t)((uint32_t)(F_CPU)/(2*f));
  31.                         OCR1A = ocr;
  32.                         Delay(100);
  33.                         ByteTo2Char(f/1000, str );
  34.                         ByteTo2Char((f%1000)/10, str+2 );
  35.                         str[4]=0;
  36.                         LCD_puts( str, 0 );
  37.                 }
  38.           }
  39.         }
  40. }



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 il 28/12/2011 alle 11:19
PM
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 17:59
Giovedì, 29/12/2011
il cross-posting non è molto gradito...

lo so perfettamente, ma dato che nessuno risponde sull'altro forum e ho aspettato 2 giorni prima di postarlo qui, non avevo altre soluzioni! - el cuba libre - 29/12/11 18:05
PM