Newsgroup: it.hobby.elettronica.digitale
Titolo: Avr Studio 4 e Win Avr...

Un saluto a tutti...
Sto sviluppando per un atmega644 con avr studio e win avr (gc) come
compilatore...
mi è venuto un dubbio prima... esempio: mi trovo al punto di voler
settare il bit 7 di ADCSRA che si chiama (il bit) ADEN... posso
scrivere qualcosa del tipo ADCSRA_ADEN=1;  oppure altro esempio...
voglio settare il bit ADSC di ADCSRA (per far partire una conversione
ADC)  posso fare ADCSRA_ADEN=1;? questo mi verrebbe molto utile nelle
funzioni in cui mi serve far partire l'adc senza rischiare di andare a
toccare nessuna sua impostazione...
grazie per le risposte...
Damiano

 grazie per le risposte...
ADCSRA |= (1 << ADEN);
o anche:
ADCSRA |= _BV(ADEN);
Ciao!
Marco / iw2nzm

 Marco / iw2nzm
grazie mille...
e se io volessi fare un ciclo while che aspetta che il flag ADIF
diventa 1?
come faccio a far leggere al micro solo il bit ADIF nel registro 8 bit
ADCSRA?
grazie mille dell'aiuto...

 grazie mille dell'aiuto...
loop_until_bit_is_set(ADCSRA, ADIF);
Ti consiglio di leggerti la documentazione delle avr-libc:
http://www.nongnu.org/avr-libc/user-manual/modules.html
Ciao!
Marco / iw2nzm

 
Damiano.Benede...@gmail.com
 ha scritto:

grazie mille... era proprio ciò che cercavo... nelle cartelle ho
provato a cercarlo... ma... non l'ho trovato...


ma scusa un secondo...
il metodo "loop_until_bit_id_set(ADCSRA,ADIF)" mi suona tanto come una
chiamata a una libreria già fatta... e se io non volessi usare queste
librerie? (è un'applicazione time critical...) ho visto che il
compilatore non mi da errore facendo: while(ADCSRA,ADIF==1)... esiste
un metodo così "semplice" per poter scrivere 1 in un solo bit? tu mi
hai scritto un modo che non mi piace moltissimo..."ADCSRA|=(1<<ADSC)"
non si può fare ADCSRA,ADSC=1; ? oppure se no mi puoi spiegare che
cosa significa ogni singolo carattere di ciò che mi hai scritto?
grazie... e scusa ma vengo da un 89c51 e il keil mi faceva scrivere
così... grazie... e scusa il disturbo...

 così... grazie... e scusa il disturbo...
Se anche il keil ti permetteva sintassi proprietarie ti avrebbe comunque 
permesso di usare il C standard...
L'istruzione è comunque semplicissima: il registro ADCSRA viene messo in 
OR con un byte che ha '1' nella posizione del bit occupata da ADSC e 
memorizzato nuovamente in ADCSRA. Che è proprio quello che volevi: 
mettere a 1 il bit ADSC.
Ciao!
Marco / iw2nzm

 Marco / iw2nzm

 
Damiano.Benede...@gmail.com
 ha scritto:

ok scusa hai ragione... non sono andato a leggere nei file...
beh cmq il c che ho usato sia con il keil x l'89c51 che il codewarrior
per il motorola mi faceva fare una cosa del genere ADCSRA_ADSC=1;
con più bello intendevo che mi era più famigliare... probabilmente non
mi piace la tua sintassi solo perchè sono all'inizio... comunque... se
invece io voglio resettare un bit (ad esempio l'ADIF) dovrò mettere la
stessa sintassi che hai messo tu ma in "AND" con un byte che ha 0
nella posizione di ADIF esatto? se sostituisco solo 0 nella sintassi
messa da te fa la OR con 0 che non mi resetta vero? scusa ma sono un
po zuccone...
e grazie dell'aiuto...

 nella posizione di ADIF esatto? 
Giusto. Puoi usare anche la solita notazione - ovvero (1 << bit) o 
_BV(bit) e fare il complemento a uno così rimane più leggibile.
Ciao!
Marco / iw2nzm

 
Damiano.Benede...@gmail.com
 ha scritto:

un'ultima domandina... se volessi andare a leggermi bene cosa fa la
funzione bit_is_clear dove devo andare a cercarla??!
grazie mille...

 grazie mille...
Nella stessa pagina che ti ho segnalato inizialmente...
Scegli il file che ti interessa (in questo caso avr/sfr_defs.h) e trovi 
le macro commentate.
Oppure apri direttamente il file dal tuo harddisk.
Ciao
Marco / iw2nzm

 
Damiano.Benede...@gmail.com
 ha scritto:

sono ancora qui a rompere... scusate ma sono all'inizio... una
domanda... ma il simulatore che c'è in avr studio 4 è affidabile? no
perchè tante volte funziona bene ma...alcune volte mi da risultati del
tutto inaspettati... ad esempio non mi scrive il valore di TCNT1 (il
timer) in una variabile a 16 bit... alcune volte non funziona la
mascheratura in and per mandare a zero un bit e viene mandato a zero
tuto il byte... uff è un casino... grazie per le preziose risposte...
Damiano...

 bit e viene mandato a zero tuto il byte... 
E' il bello del simulatore: con tutta probabilità sbagli qualcosa e lui te
lo fa vedere. ;-)

 
Damiano.Benede...@gmail.com
:

si ma quindi mi assicurate che è affidabile... perchè... non vorrei
sbattermi a correr dietro al simulatore e poi scoprire che sbagliava
il simulatore...
sisi certo il simulatore è comodissimo... approfitto di te,
F.Bertolazzi... nel simulatore come si fa a dare l'input? ad esempio
voglio che un ingresso (tipo l'adc) diventi un certo valore... come
faccio?!?! basta cliccarci sopra?

 faccio?!?! basta cliccarci sopra?
Non fai più alla svelta a provare che a chiedere?

 Non fai più alla svelta a provare che a chiedere?
Ho gia provato ma non ho ottenuto risultati... o meglio non ho
ottenuto ciò che mi aspettavo...
comunque grazie... ora so che posso fidarmi del simulatore...
grazie... e ciao

uff continuo a trovare strane cose e non posso fare a meno di
chiederle qui...
quando scrivo numeri del tipo 0.005 mi uccupa tipo 256 byte in più di
ram (se scrivo 0,005 non li riempie quei 25 byte)... idem quando
faccio qualche operazione con qualche variabile che è dichiarata come
float... è giusto? è un casino per un micro come un atmega lavorare
con le virgole? consigliate di usare numeri decimali molto grossi (per
eliminare la virgola)?
grazie mille per l'aiuto... ma all'inizio penso sia stato un po per
tutti così no? grazie e ciao...

 eliminare la virgola)?
Se bastano per il range di numeri che devi esprimere, č prassi abituale
farlo.

 farlo.
256 byte in più... si si ho idea della differenza tra virgola mobile e
fissa... quindi diciamo che è meglio non mettere la virgola... anche
se devo aumentare la dimensione delle variabili?!?! e nel caso in cui
una divisione tra due numeri interi da come risultato un numero con la
virgola lui che fa? elimina la parte decimale esatto?