Alla ricerca di una MCU atmel.

Sono alla ricerca di una MCU atmel da sostituire alla serie 48/88/168/328, sono giorni che cerco e leggo datasheet mi sa che non ne vengo fuori. L'attiny 84 sarebbe l'ideale ma purtroppo l'applicazione usa ICP e OC0A e OC0B e nell'84 il pin ICP e condiviso con OC0B quindi o l'uno o l'altro. L'applicazione occupa meno di 8k flash, usa I2C (o SPI), OC0A e B pilotano ognuna un triac, su ICP c'è il segnale ZCD e stop. Quindi i pin usati sono pochi: 2 pin OC0A e B 1 pin ICP 4 pin SPI o 2 con I2C. 1 led

Totale 8 con SPI o 6 con I2C.

Leggendo leggendo scopro che alcuni attiny hanno un timer main visto prima, addirittura 9 PWM peccato che non sono in grado di sfruttarlo per l'applicazione. La speranza è quella di trovare una MCU almeno simile alle specifiche su menzionate, però dato che ho scoperto questi timer specifici, mi chiedo, vuoi vedere che c'è una MCU con due timer di cui uno a 16 bit che anziché 2 output compare unit per timer ne abbia 4, così riuscirei a controllare 4 triac via hadware senza fare miracoli via software che ancora non sono riuscito a fare. Ocio che il miracolo via software per 4 uscite non sono capace di farlo perché il gate riceve un treno di impulsi a 10kHz di durata variabile, poi il codice è sincronizzato con il segnale dello ZCD (su ICP), quindi non serve specificare la frequenza di rete perché va in automatico da circa 20Hz a 70Hz.

PS: Ho la tentazione di scrivere il soggetto in maiuscolo, così qualcuno mi caca, tipo astro impegnatissimo sullo SB :D .

Ciao.

MauroTec: PS: Ho la tentazione di scrivere il soggetto in maiuscolo, così qualcuno mi caca, tipo astro impegnatissimo sullo SB :D .

Perché non puoi usare un 328, magari in case TQFP32 così non impegna molto spazio. ?

Perché non puoi usare un 328, magari in case TQFP32 così non impegna molto spazio. ?

Che culo, hai risposto prima che il timer 1 andasse in overflow. :D Credo che al posto del 328 posso usare 88 (devo controllare), con il 168 sono sicuro che funge. Mi sembra sprecato anche l'88, (che dentro non ho), viaggio con l'oscillatore RC e quindi o altri due pin liberi.

Che mi dici invece di timer simili al 328 ma con 4 output compare pin, cioè OC0A, OC0B, OC0C e OC0D, mentre per il timer 1 a 16 bit mi basta che ci siano 4 registri OCR1n con la possibilità di abilitare le relative ISR(TIMER1_COMPn), pensi esista qualcosa?.

Ciao.

MauroTec: Che culo, hai risposto prima che il timer 1 andasse in overflow. :D

Ripeto la domanda, per quale motivo non vuoi usare il 168/328 ? Comunque non credo esistano AVR piccoli con le caratteristiche che cerchi.

Ripeto la domanda, per quale motivo non vuoi usare il 168/328 ?

Infatti non ho detto che non posso/voglio usarlo, solo che mi sembra sprecato anche l'88 sul quale dovrebbe funzionare l'applicazione, sempre se la sola cosa che hanno cambiato rispetto al 168 riguarda solo la quantità di flash, ram ed eeprom.

Poi stupidamente pensavo che potevo anche risparmiare money scegliendo un attiny e l'84 sarebbe perfetto, ma ICP/OC0B condiviso mi guasta la festa. Forse riuscirei anche a farlo funzionare modificando il codice, ma la modifica che andrei a fare non mi lascia contento per niente. Cioè disabilito ICP e abilito OC0B in modo toggle, così genero il treno di impulsi al primo match tra TCNT1 e OCR1n che come conseguenza salta alla ISR(TIMER1_COMPn) dove imposto OCR1n (il secondo match) a ICR-100 (es 10000 - 100 nel caso in cui F = 50Hz). Il secondo match spegne il treno (cioè il toggle) e riabilita ICP e dovrebbe funzionare anche se ho meno di 100us per fare ciò.

Preferirei comunque trovare un attiny senza quella condivisione ICP/OC0n, proprio mi guasta la festa, trovandolo il port da 328 ad attiny sarebbe indolore per me.

Ciao.

Ho aggirato l'ostacolo con l'attiny84, invece che applicare il segnale ZCD su ICP pin, lo applico al comparatore analogico presente dentro il tiny84.

Precisamente AIN0 e AIN1 sono rispettivamente + e - del comparatore analogico. AIN0 può essere configurato in modo da essere internamente collegato al riferimento bandgap 1.1V, in questo modo AIN0 è nuovamente disponibile come analogico o digitale, e l'ingresso + del comparatore fissato sul riferimento di 1.1V.

Il segnale ZCD ad onda quadra lo applico all'ingresso ( - ) AIN1 del comparatore analogico. L'uscita del comparatore può sollevare una IRQ indipendente, oppure può essere collegata alla logica del circuito ICP (occhio non al pin, ma alla logica interna). Quando il comparatore cambia stato in accordo a quanto configurato, la logica ICP rivela un cambiamento di stato e una IRQ viene sollevata, la conseguenza che anziché saltare alla routine ANA_COMP, salta a TIMER1_CAPT, così il valore di TCNT1 viene salvato in ICR1 da hardware.

Con questa variante il tiny84 non ha più motivo di essere scartato per questa applicazione. almeno fino al prossimo impedimento. Un circuito di MUX interno al micro permetterebbe di risolvere i conflitti spostando la funzionalità sul pin fisico desiderato, però lato software di deve prima configurare il MUX (o i vari MUX), in più i MUX hanno un costo per il produttore.

Questa avventura termina qui con successo grazie alla mia caparbietà, non certo all'aiuto ricevuto dal forum, ciò è solo una constatazione del livello di competenza raggiunto da questo forum e non è una polemica. C'è una similitudine con il topic di vbextreme che nonostante le difficoltà ha fornito un grande contributo a questa comunity.

La speranza è l'ultima a morire e quindi spero che il livello si alzi un poco in futuro. In verità la comunity Italiana poggia su un forum zoppo, cioè mancano le sezioni destinate agli argomenti complessi, sezioni solo presenti anche in eccesso nel forum internazionale.

Saluti e stima a tutti e un particolare ringraziamento ad Astro e a vbextreme.

Ciao.