- Messaggi: 30
- Ringraziamenti ricevuti 0
Delucidazioni sull'esempio Switch(C18 Step by Step) e sui pulsanti in generale
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- patana93
- Autore della discussione
- Junior Member
La direttiva define in questo caso è usta per chiamare con un altro nome un qualcosa di più scomodo da scrivere. Se scrivi #define BT1 0b11100000 stai dicendo al compilatore, quando trovi scritto BT1 leggilo come 0b11100000.quando si parla di #define BT1 xxxxxxxx cosa sto settando?
In quella variabile, viene salvato lo stato della porta b con l'istruzione button = PORTB; siccome sulla porta b ci sono collegati i 4 pulsanti, quella variabile identifica lo stato della porta e di conseguenza dei pulsanti.Oppure la variabile button non riesco a capire a cosa si riferisca di preciso
0xF0 è un valore esadecimale, se lo vedi in binario sarebbe 0b11110000.E neanche la parte button = button & 0xF0
Quella istruzione fa l'AND logico tra il valore button (lo stato delle porte e quindi dei pulsanti) e il valore 11110000.
In questo modo i primi 4 bit vengono messi a zero e gli altri 4 sono uguali a quelli della variabile button.
Questo ha senso perché i 4 pulsanti della freedom sono collegati ognuno ad un pin della porta b, in particolare su RB4, RB5, RB6, RB7, quindi non usando i pin RB0, RB1, RB2, RB3 si mettono a zero.
Aspetta, stai facendo un po' di confusione, ogni pulsante non ha 8 bit, ogni pulsante corrisponde ad un solo pin del pic e quindi ad un solo bit della porta a cui è collegato (in questo caso porta b).Per farmi comprendere meglio, sono riuscito a capire che i 4 bit meno significativi di ogni pulsante vanno settati a 0 perchè sono quelli più significativi a decretare se il pulsante è premuto o meno(ma non ho capito bene come si identificano i 4 pulsanti) e sperimentando ho capito che se setto il default come 0x0F ho tutti i pulsanti spenti invece che accesi.
I pulsanti della freedom II sono collegati con il pull-up e quindi senza premere niente si trovano a 1.
Quindi facendo button = PORTB; ho che la variabile vale (in binario) 0b11111111.
Facendo l'AND logico metto a zero i primi 4 bit che non mi interessano, quindi facendo button = button & 0xF0; ottengo che button vale 0b11110000.
In questo caso non ho pulsanti premuti, infatti questo valore non corrisponde a nessun pulsante BT1, BT2, BT3, BT4 e non si accende niente.
Vediamo ad esempio il caso in cui è premuto BT2, questo pulsante è collegato al pin RB5 e quando è premuto il valore del pin va a zero, per cui con l'istruzione button = PORTB; avrò per la variabile button il valore 0b11011111,
poi facendo button = button & 0xF0; otterro 0b11010000 e questo è proprio il valore che identifica BT2.
Nello switch sono nel caso BT2 e di conseguenza accendo i led sulla porta d eseguendo l'istruzione LATD = 0x02;
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
- Messaggi: 1222
- Ringraziamenti ricevuti 104
Ora ho capito tutto quello che riguarda i pulsanti! ^^
Ultima curiosità, se io premo un pulsante allora, non si dovrebbe accendere un led dal 5 all'8(in base a quale pulsante premo)e spegnere i primi 4?
Perchè tutto è nato proprio dal fatto che premo i pulsanti ma sulla Freedom II rimangono sempre i primi 4 accesi(quando dico i primi quattro intendo, partendo da destra).
Grazie ancora
Si prega Accedi o Crea un account a partecipare alla conversazione.
- patana93
- Autore della discussione
- Junior Member
- Messaggi: 30
- Ringraziamenti ricevuti 0
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
- Messaggi: 1222
- Ringraziamenti ricevuti 104
Si prega Accedi o Crea un account a partecipare alla conversazione.
- patana93
- Autore della discussione
- Junior Member
- Messaggi: 30
- Ringraziamenti ricevuti 0
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.