Logica AtmeL
Moderatore:
Paolino
0
voti
[42] Re: Logica AtmeL
Mi sa che non hai letto bene
Io penso di aver capito, e di aver detto il perché.... sto solo chiedendo se ho capito bene o c'è dell'altro che da neofita mi sfugge e per "cxxo" fa girare bene il programma... se no ho capito e tutto funziona.
Grazie lo stesso comunque.
Io penso di aver capito, e di aver detto il perché.... sto solo chiedendo se ho capito bene o c'è dell'altro che da neofita mi sfugge e per "cxxo" fa girare bene il programma... se no ho capito e tutto funziona.
Grazie lo stesso comunque.
0
voti
[43] Re: Logica AtmeL
belva87 ha scritto:Mi sa che non hai letto bene
Probabilmente..
sto solo chiedendo se ho capito bene
Se hai capito la modifica del codice del messaggio [39], e se hai capito quanto spiegato in [37] come altrettanto quanto spiegato in [31], allora si..
e per "cxxo" fa girare bene il programma... se no ho capito e tutto funziona.
Riguardo a quello, io avevo capito che tu usavi PINA0 e PINA1 per "abitudine", senza sapere che fossero veramente dichiarate nell'header citato in 35.
Se ho capito male ti chiedo scusa.
Abbi pazienza, ma dopo tutto questo tran tran ed un DAC che mi sta facendo girare i -censored- meglio che mi fumo una sigarettina..
1
voti
[44] Re: Logica AtmeL
Ma di che ti scusi, sono cose che capitano e non sono un tipo "incaxxoso".
Va bene, fai come credi... anche se non ti conosco però ci tengo a dirti che puoi fare altro piuttosto che una sigaretta, fumare fa male...
e grazie ancora, se ho dei dubbi mi farò di nuovo vivo!
Va bene, fai come credi... anche se non ti conosco però ci tengo a dirti che puoi fare altro piuttosto che una sigaretta, fumare fa male...
e grazie ancora, se ho dei dubbi mi farò di nuovo vivo!0
voti
[45] Re: Logica AtmeL
belva87 ha scritto:anche se non ti conosco però ci tengo a dirti che puoi fare altro piuttosto che una sigaretta, fumare fa male...
Sto cercando di smettere, e la tua risposta è una motivazione in più per non fumare.. Grazie.
se ho dei dubbi mi farò di nuovo vivo!
Quando vuoi.
0
voti
[46] Re: Logica AtmeL
Bravo, fai un ottimo investimento per te e per le persone che ti stanno attorno!
A dirla tutta ho già un nuovo "problema" ma data l'ora meglio che vado a dormire, siamo già a domani
Grazie ancora e notte a tutti!
A dirla tutta ho già un nuovo "problema" ma data l'ora meglio che vado a dormire, siamo già a domani
Grazie ancora e notte a tutti!
0
voti
[47] Re: Logica AtmeL
xyz ha scritto:Sicuro ? Quale compilatori usi ? Con il GCC per AVR dal 4.0 al 4.7 genera i seguenti errori:
Scusate se vado OT, il gcc 4.7 lo usi su linux giusto? Se si quali buildscript hai usato per la compilazione oppure hai usato già i pacchetti di qualche distribuzione?
Grazie
Invece un messaggio in thread. Volendo si può usare il set del singolo bit anche con GCC AVR in questo modo:
- Codice: Seleziona tutto
typedef unsigned char BYTE;
typedef union
{
BYTE Val;
struct
{
BYTE b0:1;
BYTE b1:1;
BYTE b2:1;
BYTE b3:1;
BYTE b4:1;
BYTE b5:1;
BYTE b6:1;
BYTE b7:1;
} bits;
} BYTE_VAL;
void main()
{
BYTE_VAL a;
a.Val = PORTB;
a.bits.b0 = 1;
a.bits.b2 = 1;
PORTB = a.Val;
}
Sicuramente il codice prodotto non è ottimizzato perché il compilatore non usa le istruzioni per impostare i singoli bit ma riscrivere l'intera porta. Però può essere utile a capire, tenendo a mente anche tutti gli altri consigli degli altri utenti, come usare funzioni o macro per fare il cambio dei pin.
Il codice è estratto dagli include del compilatore Microchip.
Usare le operazioni logiche per cambiare il valore dei pin non è obbligatorio è solo un modo per scrivere codice comprensibile oltre che generare codice ottimizzato.
1
voti
[48] Re: Logica AtmeL
bobina ha scritto:Scusate se vado OT, il gcc 4.7 lo usi su linux giusto? Se si quali buildscript hai usato per la compilazione oppure hai usato già i pacchetti di qualche distribuzione?
Si, uso Linux dal secolo scorso
Il tuo codice usa i bit fields, sono comodi per un codice più portabile ma non generano un codice ottimizzato. Questo è quello generato con il compilatore GCC per AVR 4.7 con i commenti il codice C:
- Codice: Seleziona tutto
// a.Val = PORTB;
in r24,0x18
// bits.b0 = 1
ori r24,lo8(1<<0)
// a.bits.b2 = 1
ori r24,lo8(1<<2)
// PORTB = a.Val
out 0x18,r24
Il codice non è ottimizzato, con quel indirizzo della porta bastano due sole istruzioni in assembler
0
voti
[49] Re: Logica AtmeL
Salve a tutti, sto tentando di valutare lo stato di un bit per far poi accadere qualche evento, tipo accende un led per rimanere in tema
e non esagerare per le mie attuali competenze.
Ho compilato, senza errori, questo codice:
L'intento è quello di agire con l'AND sullo stato dei bit di PORTA in maniera tale da isolare il singolo bit, infatti facendo l'istruzione AND tra due bit il risultato è 1 solo se tutti e due i bit sono a 1, ed è quello che mi interessa ottenere (il tutto serve per valutare quando un tasto viene premuto).
Ho fatto girare il programma ma il led verde non si accende mai...
Sto sbagliando qualcosa di macroscopico nel ragionamento?
Ho compilato, senza errori, questo codice:
- Codice: Seleziona tutto
int main(void)
{
MCUSR = (0 << WDRF); // mette a 0 il bit WDRF del registro MCUSR, disabilita il watchdog
wdt_disable(); // a cosa serve?
DDRA = 0b11111011; // imposto PINA2 come ingresso, tutti gli altri come uscita
_delay_ms(1000); // aspetto per avere tempo dopo il reset
PORTA = (1 << PINA0); // scrivo 1 nel registro PORTA in posizione di PINA0, led verde on
_delay_ms(1000); //aspetto
PORTA = (1 << PINA1) | (0 << PINA0); // accendo led verde e spengo led rosso
_delay_ms(1000); //aspetto
int stato_PA2 = 0; // definisco stato_PA2 e gli assegno 0
stato_PA2 = ( PORTA & 0b00000100 ); //stato_PA2 diventa 0b100 se PINA2 (pin 3 di PORTA) vale 1
while(1)
{
if ( stato_PA2 == 0b00000100 ) // vuol dire che PINA2 è a livello 1
{
PORTA = ( 1 << PINA0 ); // accendo il led verde se PINA2 è a 1
}
}
}
L'intento è quello di agire con l'AND sullo stato dei bit di PORTA in maniera tale da isolare il singolo bit, infatti facendo l'istruzione AND tra due bit il risultato è 1 solo se tutti e due i bit sono a 1, ed è quello che mi interessa ottenere (il tutto serve per valutare quando un tasto viene premuto).
Ho fatto girare il programma ma il led verde non si accende mai...
Sto sbagliando qualcosa di macroscopico nel ragionamento?
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 6 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




