[RISOLTO] PWM e DS1307

Ciao a tutti!

All'interno dello sketch da me creato, ho usato tutti i pin PWM che avevo per modulare dei led.
La modulazione dei led è pilotata da un orologio RTC, il solito DS1307.
Mi sono accorto che i pin 11 e 3 che usano TIMER2 non funzionano e da qualche parte ho letto che RTC e TIMER2 non vanno molto d'accordo.
Ho provato un paio di librerie per RTC diverse ma senza successo.
Cosa posso fare?

  1. esiste qualche libreria che risolve il problema?
  2. se no, prevedere un port expander, ma non ne ho mai trovati che gestiscano il PWM.

grazie!

la softpwm l'hai provata ?
http://code.google.com/p/rogue-code/wiki/SoftPWMLibraryDocumentation

ed usare un digital to analogic converter? (DAC)

vedi

La comunicazione con un RTC esterno tipo un DS1307 avviene via I2C, e questo protocollo non usa timer. Usa la libreria Wire, che comunica sui pin A4 e A5 tramite la periferica TWI interna al microcontrollore. Non vedo come potrebbe influire sulla modulazione PWM del timer 2.

Ma che libreria stai usando per comunicare con il DS1307?
Hai incluso qualche altra libreria nel tuo sketch?

Grazie a tutti!
Rispondo solo adesso perchè la mia connessione internet sta facendo i capricci in questi giorni.

per brunello:
molto simpatica la soluzione softPWM, non mi ricordavo neppure che esistesse, potrebbe essere utile, merita proprio che faccia delle prove

per superlol:
il link che mi hai mandato mi porta ad un MCP4131 e non ho ben capito come dovrei usarlo, comunque l'argomento DAC mi interessa e mi documenterò

per leo72:
anche la mia poca esperienza mi faceva pensare quanto dici, resta il fatto che TIMER2 non lavora correttamente.
come librerie per DS1307 io ne ho provate 2:
RTCTimedEvent.h perchè mi intrigava come gestiva gli eventi
DS21307.h che mi sembra quella più diffusa, o sbaglio?

come IDE uso ancora la versione 023 perchè per le 2 librerie citate non ho ancora trovato l'aggiornamento alla 1.01.

nel mio sketch inoltre ho caricato le seguenti librerie:

WProgram.h
Wire.h
EEPROM.h
IRremote.h
LiquidCrystal_I2C.h (praticamente uso un PCF8574 per pilotare il display in I2C) prima avevo la classica LiquidCrystal.h

non ho nessun errore di compilazione e le varie parti del programma rispondono correttamente senza apparenti bachi.

il mio programma è pensato per gestire un acquario sia come luci, temperatura etc, tutto settato e richiamato da telecomando Tv via IR.

grazie!

IRremote.h usa il timer
Ciao Uwe

Grande Uwe!
hai centrato il problema!
Ho provato ad eseguire uno sketch d'esempio inserendo anche un comando PWM su pin 11 e 3 e non funziona.
Immagino che la cosa non sia facilmente risolvibile, meglio passare al softPWMo ci sono alternative?

grazie ancora

se non hai dimestichezza con i timer, metter cioè materialmente mano ad una lib o al core e modificarli, è meglio se usi la softPwm

in effetti non mi sento in grado di addentrarmi così profondamente nella programmazione.
Seguirò il tuo consiglio e vi farò sapere...

potresti usare un TLC5940 come Watterott electronic ma anche la libreria di quello usa un timer (non so dire quale.
Ciao Uwe

Dovrebbe essere il timer 1.

ciao ragazzi,

ho scoperto SoftPWM usa anch'essa il TIMER2, per cui siamo ancora al punto di partenza. Ho fatto anche una prova per scaramanzia...

il fatto è che mi manca un solo pin PWM (classico, no?) e mi seccava aggiungere altro hardware.

La soluzione col TLC5940 probabilmente è la più semplice specie se usa TIMER1... e se invece usassi un PCA9685? Se non sbaglio è un port expader PWM via i2c.
Non so però quale dei 2 abbia le librerie più raffinate e quanto possano essere versatili (oltre che reperibili)

Il TLC é venduto anche in DIP mentre il PCA solo in SMD.
Se Ti manca solo un PWM allora prendi un Arduino MEGA. Potresti anche prendere un Seeeduino Mega che ha le misure come un uno.
Ciao Uwe

Forse la riterrai una domanda stupida .....i pwm ti serve siano attivi tutti nello stesso tempo ?

Una soluzione alternativa è mettere in standalone un altro Atmega328, a cui spedisci via I2C o seriale le informazioni per il pilotaggio dei led tramite PWM. Usandolo solo per questo compito, hai tutti e 6 i canali PWM disponibili, al costo di qualche euro di componenti.

Il fatto che i componenti siano SMD complica un po' la cosa...
..e affiancare un altro atmega solo per 1 pin...

Probabilmente la soluzione migliore e saggia è anche quella più ovvia...passiamo ad un Mega, ma siccome ho problemi di spazio... seeeduino mega e non ci penso più.
Avrei preferito un arduino autentico, spero che i puristi mi perdoneranno.

A parte la diversa disposizione dei pin, è perfettamente intercambiabile col mitico arduino?
Devo stare attento a qualcosa (forse all' alimentazione jack-usb mi sembra di aver visto)?

grazie ragazzi, chissà che una volta possa sdebitarmi...

ps: purtroppo i pin devono funzionare assieme, sono 5 tipi di led diversi che vengono modulati indipendentemente: led bianchi caldi, neutri e freddi, led rossi 660nm per fotosintesi e led rossi 610nm che completano lo spettro della clorofilla per le piante dell'acquario... ma questa è un'altra storia...

Il sito di Seedstudio dice che la Seeduino Mega è compatibile com la maggior parte degli shield per Arduino, però non so se la piedinatura corrisponde al 100%

Non corisponde al 100% con quella della Arduino MEGA perché mettono sui header tutti i 70 pin possibili del Atmega e non solo i 54 come Arduino MEGA.
I pin Arduino UNO dovrebbero essere uguali a quella parte del Arduino MEGA.
Ciao Uwe

Ciao ragazzi,

finalmente mi è arrivato il seeeduino mega v1.23.

Ho già provato e tutto ha funzionato al primo colpo. Il mio sketch non ha avuto bisogno di modifiche.
Adesso ho tutti i pin che mi servono e ne avanzo, quindi toglierò il port expander per il display e lo terrò a parte per il vecchio e caro arduino uno.

anche con seeeduino il problema del timer2 continua ad esserci per cui i pin PWM 9 e 10 non possono essere usati. poco male.

grazie ancora a tutti!