Go Down

Topic: Ardu-Aquarium Controller v. 3.3.1 (Read 347655 times) previous topic - next topic

lexip

Quote
Bastano alcune #define, non è un grosso problema. Ma credo che vogliano restare sulla piattaforma UNO perché la MEGA non ha problemi di memoria, ad esempio, ed anche perché già a suo tempo suggerii l'uso di un Atmega644 proprio per avere più flash e ram ma fu scartato.


Ciao Leo72 mi spiegheresti come si fa, sono molto interessato... come dici tu non mi interessa passare ad Arduino Mega

Saluti

lestofante

non le #defgine ma le #ifdef, le define le mette il compilatore in base al target per cui compili.

Guarda le librerie arduino, per esempio quelle PWM, ma anche la swRtc usa questo metodo :)
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

leo72

@Lesto:
sì, ma si capisce dai  :P
comunque diciamo "direttive al compilatore", che è più esatto

@lepix:
si usano le direttive al compilatore per far sì che il codice si possa adattare a diverse MCU. Ovviamente si parla di cose a basso livello, cioè la manipolazione dei registri del micro per accedere a periferiche o funzioni non gestite dal core di Arduino.
Esempi ne trovi negli header di diverse lib che ho scritto.

lestofante

dai mettiamo unpiccolo esempio:

Code: [Select]
#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    TIFR |= _BV(OCF1A);      // clear any pending interrupts;
    TIMSK |=  _BV(OCIE1A) ;  // enable the output compare interrupt 
#else
    // here if not ATmega8 or ATmega128
    TIFR1 |= _BV(OCF1A);     // clear any pending interrupts;
    TIMSK1 |=  _BV(OCIE1A) ; // enable the output compare interrupt
#endif   
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

lexip

Grazie lesto... potresti completare il codice con l'esempio di utilizzo degli I/O.

Saluti

lestofante

io farei così
un file config.h con dentro le impostazioni dei pin (valori a caso)
Code: [Select]

#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    const int pinInput1 = 10;
    const int pinInputSCL = A5;
    const int pinInputSDA = A6;
#else
    // here if not ATmega8 or ATmega128
    const int pinInput1 = 21;
    const int pinInputSCL = A0;
    const int pinInputSDA = A1;
#endif   


ovviamente tutti i pin usati devono essere mappati quì dentro, questo ovviamente è possibile solo se tutte le board eseguono lo stesso codice, e quindi hanno le stesse capacità hardware, solo che è su pin differtenti.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino


lexip

Scusami lesto ma non ho capito bene... la parte che segue cosa fà :

Quote
#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    TIFR |= _BV(OCF1A);      // clear any pending interrupts;
    TIMSK |=  _BV(OCIE1A) ;  // enable the output compare interrupt 
#else
    // here if not ATmega8 or ATmega128
    TIFR1 |= _BV(OCF1A);     // clear any pending interrupts;
    TIMSK1 |=  _BV(OCIE1A) ; // enable the output compare interrupt
#endif 


invece ho capito che con questa dichiaro i pin con delle costanti

Quote
#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    const int pinInput1 = 10;
    const int pinInputSCL = A5;
    const int pinInputSDA = A6;
#else
    // here if not ATmega8 or ATmega128
    const int pinInput1 = 21;
    const int pinInputSCL = A0;
    const int pinInputSDA = A1;
#endif   


ma come attivo un'uscita senza usare i digitalWrite e come leggo senza digitalRead?
grazie ancora



leo72


Scusami lesto ma non ho capito bene... la parte che segue cosa fà :

Quote
#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    TIFR |= _BV(OCF1A);      // clear any pending interrupts;
    TIMSK |=  _BV(OCIE1A) ;  // enable the output compare interrupt 
#else
    // here if not ATmega8 or ATmega128
    TIFR1 |= _BV(OCF1A);     // clear any pending interrupts;
    TIMSK1 |=  _BV(OCIE1A) ; // enable the output compare interrupt
#endif 


E' un esempio di una serie di direttive al compilatore che attivano funzioni particolari del microcontrollore.
Diciamo che sono funzioni avanzate.

Quote

ma come attivo un'uscita senza usare i digitalWrite e come leggo senza digitalRead?
grazie ancora

Ti posso consigliare la lettura di questo articolo[/quote].

riciweb


Magari lo saprete anche, ma si risparmiano diverse centinaia di byte usando gli accessi diretti ai registri di sistema al posto delle digitalWrite e delle digitalRead. Per le letture analogiche c'è la possibilità di fare altrettanto, anche se è un pò più complesso che nel precedente caso.



io farei così
un file config.h con dentro le impostazioni dei pin (valori a caso)
Code: [Select]

#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    const int pinInput1 = 10;
    const int pinInputSCL = A5;
    const int pinInputSDA = A6;
#else
    // here if not ATmega8 or ATmega128
    const int pinInput1 = 21;
    const int pinInputSCL = A0;
    const int pinInputSDA = A1;
#endif   


ovviamente tutti i pin usati devono essere mappati quì dentro, questo ovviamente è possibile solo se tutte le board eseguono lo stesso codice, e quindi hanno le stesse capacità hardware, solo che è su pin differtenti.


Belle dritte, grazie a tutti e due, approfondirò meglio...
Vi va, senza impegno naturalmente, di dare un'occhiata al volo alla libreria che abbiamo scritto io e Leouz almeno per qualche consiglio su come è stata impostata?

http://forum.arduino.cc/index.php?topic=198456.0

La metto in allegato anche qui.
Grazie in anticipo  :)


@ Leo72
OT Leggo spesso i tuoi articoli, imparo molto da te grazie per gli insegnamenti e per quel pizzico di allegria che mi hai regalato con l'articolo sulla sindrome di Gundam  XD  XD  XD mi ci sono riconosciuto in pieno, almeno per come ho iniziato un paio di anni fa...  :D :D :D Poi però mi sono messo sotto con risultati non proprio eccellentissimi, ma tant'é a piccoli passi piano piano arrivo pure io  :smiley-sweat:



al posto della tua piastra con i rele si potrebbe utilizzare questa...
http://www.ebay.it/itm/8-Channel-12V-Relay-Shield-Module-for-Arduino-ARM-PIC-AVR-DSP-SRD-12VDC-SL-C-New-/350816995356?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item51ae52881c&_uhb=1


Dovrebbe andare bene, in uscita dall'IC inveter (74HC540N) da data sheet abbiamo +/- 35mA sufficienti a pilotare i singoli relé.

Ciao a tutti.

Riccardo
Riccardo

lestofante

allora, per quanto riguarda le lettura analogiche: http://forum.arduino.cc/index.php?topic=109946.0

tra l'altro si nota l'uso di #ifdef per decidere se leggere a 8 o a 10 bit
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

pieromt

#431
Nov 13, 2013, 02:38 pm Last Edit: Nov 13, 2013, 02:44 pm by pieromt Reason: 1

Dovrebbe andare bene, in uscita dall'IC inveter (74HC540N) da data sheet abbiamo +/- 35mA sufficienti a pilotare i singoli relé.


Ricci, come lo collego all'IC5 che trovo nello schema???
allego la foto dei piedini....
grazie...

P.S. ho ordinato il tutto appena mi arriva inizio a assemblare... e proviamo ....

Per quanto riguarda l'impianto luci voi che cosa usate?? io avevo pensato di aquistare dei led 3W che ne pensate

leo72


nicola90wii

Non ci credo!! Finalmente ho trovato praticamente la stessa cosa che sto cercando di progettare da più di 1 anno :) adesso ho cominciato con un amico più esperto di me a realizzare piano piano tutto, e sono sicuro che dovrò ringraziarti  mille volte :)

lexip

Leo... grazie per le dritte ancora non ho avuto modo di approfondire i link ma sembrano veramente interessanti...

Go Up