Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« on: November 07, 2011, 09:39:50 am » |
esiste una funzione su arduino che mi permette di dare il valore ad una variabile, per esempio byte, prendendo come bit gli ingressi dell'arduino? per esempio: INPUT 1 == bit7 INPUT 2 == bit6 INPUT 3 == bit5 INPUT 4 == bit4 INPUT 5 == bit3 INPUT 6 == bit2 INPUT 7 == bit1 INPUT 8 == bit0 INPUT 1 == 0 INPUT 2 == 1 INPUT 3 == 1 INPUT 4 == 0 INPUT 5 == 0 INPUT 6 == 0 INPUT 7 == 1 INPUT 8 == 0 --> value==98 esiste una funzione che mi fa questo calcolo? o devo farmi un programmino che me lo calcola? scusate ma sono un po' nuovo del linguaggio di arduino 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 226
Posts: 17000
Don't know what I do
|
 |
« Reply #1 on: November 07, 2011, 09:47:44 am » |
byte a=PORTB; ed assegni tutti i bit della porta B, che comprende i pin dall'8 al 13. Puoi fare lo stesso con PORTC e PORTD. http://www.arduino.cc/en/Reference/PortManipulation
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #2 on: November 07, 2011, 09:53:51 am » |
ok ma questo ma vale anche per i mega2560? basta che mi guardo che pin che comprendono le varie porte no? e se anzi che occupare tutti gli 8 bit ne occupo solo 5 gli altri li devo mettere a massa o comunque lasciare inutiliazzati... questo non mi piace molto... comunque è fattibile grazie 
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #3 on: November 07, 2011, 10:05:19 am » |
e se anzi che occupare tutti gli 8 bit ne occupo solo 5 gli altri li devo mettere a massa o comunque lasciare inutiliazzati... questo non mi piace molto...
Leggi tutta la porta e poi applichi una maschera AND o OR a seconda se vuoi tenere fissi a 1 o 0 i bit che non ti interessano e che puoi usare per altri scopi sia come IN che come OUT.
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #4 on: November 07, 2011, 10:17:05 am » |
non ho capito bene cosa intendi tu.. ma ho una mezza idea di come potrei fare, è che devo comunque intervenire via software, ma non è neanche un gran problema alla fine... per il mega2560 uso lo stesso principio no?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 2
Posts: 328
|
 |
« Reply #5 on: November 07, 2011, 10:41:16 am » |
supponiamo che hai salvato nella variabile n tutti i bit di una porta dell'atmega, e a te interessa salvare i primi 4 della porta in un'altra variabile x:
se te fai
x=n & 0x11110000
adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0.. così ti va bene?
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #6 on: November 07, 2011, 10:44:12 am » |
si grazie 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 226
Posts: 17000
Don't know what I do
|
 |
« Reply #7 on: November 07, 2011, 10:46:05 am » |
Appunto... stavo scrivendo la stessa cosa 
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #8 on: November 07, 2011, 10:51:57 am » |
ok ok ho capito  grazie a tutti! 
|
|
|
|
|
Logged
|
|
|
|
|
Roma / Benevento
Offline
Full Member
Karma: 0
Posts: 183
Guardava al futuro con l'inguaribile ottimismo di un dodo...
|
 |
« Reply #9 on: November 08, 2011, 03:39:09 am » |
se te fai
x=n & 0x11110000
adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0.. 0x11110000 è un numero esadecimale e vale 286.326.784 Probabilmente intendevi 0b11110000 = 240 = 0xF0 Ciao
|
|
|
|
|
Logged
|
Linux User #503422 | Linux Machine #414597-8 | Ubuntu User #30132
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #10 on: November 08, 2011, 09:54:33 am » |
se io dovessi dare un valore a una porta tipo PORTD=B00001011, cioè la uso come output, ma mi bastano solo 4 pin della porta, gli altri posso usarli come input? o devo lasiarli inutilizzati? come funziona?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 2
Posts: 328
|
 |
« Reply #11 on: November 08, 2011, 11:20:43 am » |
se te fai
x=n & 0x11110000
adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0.. 0x11110000 è un numero esadecimale e vale 286.326.784 Probabilmente intendevi 0b11110000 = 240 = 0xF0 Ciao si si hai ragione=) piccola svista @er_like_no_other puoi usarli come input, ti consiglio di leggerti questa pagina: http://www.arduino.cc/en/Reference/PortManipulationdevi settare un altro registro per impostare la porta come input o come output
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 226
Posts: 17000
Don't know what I do
|
 |
« Reply #12 on: November 08, 2011, 12:45:23 pm » |
Era la pagina che avevo suggerito io... basterebbe leggerla... 
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #13 on: November 08, 2011, 01:58:54 pm » |
eheh scusate... adesso la leggo tutta 
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #14 on: November 12, 2011, 10:42:56 am » |
non mi è chiara una cosa... ma io impostando la porta come input o output posso usare anche i pin analogici come pin digitali o no? grazie a tutti 
|
|
|
|
|
Logged
|
|
|
|
|
|