Go Down

Topic: generare una sequenza di bit a frequenza variabile (Read 7107 times) previous topic - next topic

Michele Menniti


Ma di quanta memoria hai bisogno?
Perché altrimenti ci sono anche gli Attiny2313: lavorano a 10 MHz, hanno 2 kB di Flash, sono DIP20.

Ciao leo, pochissima, devo memorizzare la sola sequenza di 24 bit che mando agli shift; se hai seguito un po' il thread, con l'aiuto di astrobeed, ho realizzato uno schedino con 3 SR da 8 bit che carico con arduino e poi eseguono da soli la sequenza a ciclo continuo e con un clock di 10MHz; poiché spegnendo si perde, devo ricaricarla ogni volta e portarmi arduino dietro.
Volevo memorizzare questa sequenza con delle memorie aggiuntive o montare direttamente un ATmega, in modo che ad ogni accensione mi caricasse gli shift.
Questo chip di cui mi parli è in grado di sostituire ATmegao? e come? L'importante è che non debba ricorrere al altri programmatori, ho preso da pochissimo ArduinoUno e voglio approfondire questa piattaforma, ho troppo poco tempo per "spaziare". Fammi sapere.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Michele Menniti



Dimenticavo, c'è anche ArduinoMini, ancora più piccolo e meno costoso, per contro non c'è la parte USB.

Anch' io volevo suggerire un arduino mini o pro mini al posto di mettere un ATmega sulla scheda dei 4094. (astrobeed era piú veloce =( )
Il vantaggio é che si ha un Arduino siccuramente funzionante senza dover preocuparsi della sua costruzione.
Per caricare il programma sul mini o mini pro é necessario un interfaccia USB-seriale TTl oppure un arduino 2009 o UNO dove togli il ATmega.

Consiglio di comprare un oscillatore da 10 Mhz al posto di farlo con uno quarzo e delle porte logiche. È piú sicuro dal punto di vista del funzionamento.

Sappi anche che l'Arduino a 10Mhz avrá i tempi di delay millis() ecc sbagliati.

Ciao Uwe

Ciao Uwe,non piangere, la tua buona volontà vale quanto un suggerimento dato per tempo…; ho ordinato proprio ieri un po' di oscillatori al quarzo, ma quello che ho realizzato è molto efficiente, valori collaudatissimi, eppoi qualche saldatura in più aumenta il divertimento (infatti ho dimenticato una massa e sono impazzito :0!). Riguardo il nano sono d'accordo con te, ma qui si tratta di un solo prototipo, pure che ci perdo un paio di giorni non succede nulla, alla fine avrò speso 1/3 di questo sistema. Grazie della dritta sui delay, ancora sto cercando di capire se posso basarmi sullo schema del duemilanove per le varie connessioni, inoltre dei due pin previsti per il quarzo non so a quale collegare la massa, visto che ad essa è riferito il segnale a 10MHz che genero col mio circuitino; non voglio lanciarmi allo sbaraglio, visto che ho solo un ATmega oltre a quello dell'UNO.
Ciao
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

L'Attiny non lo puoi programmare sull'Arduino, necessita di un programmatore esterno perché non può andare sullo zoccolo dell'Atmega (solo 20 piedini contro i 28 di quest'ultimo).
Anche se è uno spreco... continua ad usare l'Atmega, allora.

Peccato perché se la memoria da impiegare è poca e ti bastavano 3 pin, esistevano anche gli Attiny45. Solo 8 pin, 10 MHz, 4 kB di flash e 5 pin di I/O. Supercompatti! Ma anche questi vogliono un progr. esterno.

Michele Menniti

Mi rendo conto che c'è un modo immenso qui attorno  :smiley-eek:
D'altra parte, in particolare devo realizzare questo schedino, per ora, e basta, voglio imparare a meneggiare bene l'ATmega, dal punto di vista elettronico. Spero di avere altri ragguagli.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

astrobeed

Per utilizzare un oscillatore esterno, quindi niente quarzo, basta collegare il relativo segnale, onda quadra con ampiezza pari alla tensione di alimentazione dell'ATmega, al pin XTAL1 e lasciare sconnesso il pin XTAL2, corrispondono al pin 9 e 10, nel case a 28 pin, dell'ATmega328p.
Però per poter usare l'oscillatore esterno è necessario modificare la configurazione dei fuse, operazione che non puoi fare senza disporre di un programmatore per ATmega.
Alla fine fai prima a mettere il suo quarzo, costo meno di 1 Euro, all'ATmega standalone, visto che ne hai uno con sopra il bootlaoder 2009 è perfetto per questa applicazione, con il bootloader della UNO non puoi usarlo stand alone, lo programmi inserendolo sulla UNO, ricordati di selezionare 2009 come tipologia di scheda invece di UNO perché i due bootloader sono diversi.

Michele Menniti

Grande astrobeed!
Allora ho provato il tuo suggerimento software e funzna alla perfezione, quindi l'inversione della sequenza è risolta!
Stanotte (e quindi forse ho capito male ma andrò a rileggere), lamentando il fatto che pensavo di NON poter usare un ATmega bon bootloader 2009 sul mio UNO, mi è stato suggerito di riprogrammarlo ma che con UNO non potevo farlo in alcun modo.
A questo punto mi sono arrivae 3 diverse soluzioni:
1 - questa: http://arduino.cc/en/Tutorial/ArduinoISP; ho chiesto ulteriori lumi perché se funziona faccio subito uno schedino e risolvo per sempre
2 - il parallel program, un cavetto con 3 res da collegare dalla porta parallela del mio PC all'ICSP dell'UNO, sto aspettando di sapere se la specifica voce che ho nel programmer in burn bootloader è funzionale a ciò o non va coll'UNO.
3 - la tua soluzione, cioè basta settarlo come duemilanove e viene riconosciuto; l'ho provata all'istante è funziona, ho caricato il nostro skecth e non ci sono problemi, quindi ora mi basta aggiungerlo al circuito col sou quarzo ed è fatta. Grazie!
A questo punto significa che devo acquistare dei chip 2009 per le applicazioni stand alone, ma visto che vuoti costano meno, se riuscissi a far funzionare una delle due precedenti modalità potrei caricarci il bootloader dell'UNO, o forse adirittura anche quello del 2009.
Mi daresti per favore questi ulteriori ragguagli?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Non so se sono stato io però a qualcuno ieri ho detto che per problemi di compatibilità è bene non usare gli Atmega con bootloader 2009 sugli Arduino Uno e viceversa. Questo perché cambiano le velocità di collegamento fra PC ed Arduino oltre a settaggi differenti, ecc..

Cmq, un Arduino Uno non si può usare per programmare il bootloader di un Atmega. E non funziona neanche la modalità ArduinoISP, ovvero usare un Arduino come programmatore. Si può fare solo con la scheda 2009 per via della presenza del chip FTDI che converte i segnali USB in seriali.

Michele Menniti

Ciao a tutti, a questo punto mi sono reso conto che non c'è nulla da fare con il mio UNO circa la programmazione di chip vergini; ma non me la sento di prendere programmatori "esterni" perché non ho le competenze necessarie ed ho poco tempo a disposizione; inoltre ho esigenza di costruire dei circuiti stand alone ed anche qui è chiaro che il bootloader dell'UNO è inadeguato.
Quindi ho deciso di comprare una duemilanove da usare solo per programmare i chip vergini.
Devo fare due domande secche, e Vi chiedo cortesemente una risposta certa, senza timore di errori, mi spiacerebbe fare questo acquisto e non risolvere il problema.
Dispongo della versione sw 0022, se collego al mio PC la scheda duemilanove con un chip vergine, posso decidere indifferentemente di caricarci su il bootloader della duemilanove oppure dell'UNO, secondo quale mi serve di volta in volta?
Per fare questa operazione di bootloader ho bisogno di altro hw/sw particolare o la 0022 e la duemilanove hanno tutto ciò che mi serve?
Grazie di cuore, se ho una risposta completamente positiva invio l'ordine.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Attenzione ad una cosa, puoi programmare il bootloader con una 2009 ma non è un'operazione così semplice.
Per farlo lasciando il chip sullo zoccolino devi usare la tecnica del bitbang e modificare la scheda inserendo dei pin negli alloggiamenti vicini al chip FTDI.
Alternativamente puoi programmare i chip usando un circuito esterno realizzato su breadboard.
In entrambi i casi non hai un'azione diretta come quella data da un programmatore.

Io, fossi al tuo posto, mi sarei già acquistato il programmatore. Se proprio devi fare un ulteriore acquisto, perché comprare un'altra scheda quando a te serve principalmente un programmatore?
Inoltre se tu dovessi modificare i fuse del chip, non credo che con la 2009 modificata potresti farlo perché con essa potresti giusto cambiare il bootloader, non gestire un chip in maniera totale.

Michele Menniti

Ciao, meno male che hai la necessaria pazienza, altrimenti avrei fatto una doppia czz...a!
Capito che non posso mettere il chip direttamente sulla 2009 (per le chiarissime ragioni) potrei realizzare uno schedino (con zoccolo textool o normale) da innestare sulla 2009, ma mi pare di capire che comunque, in una fase di conoscenze più avanzate, sarei limitato; la domanda è: ma realizzando questo schedino (ho visto le immagini sul tutorial, basta un minimo di componenti esterni) potrei ottenere la "semplice possibilità di caricare il bootloader UNO o 2009 (a scelta) sui chip vergini?

E passiamo al programmatore, qui ne capisco ancora meno, ecco cosa mi preoccupa in realtà: mi pare di vedere dalle immagini
http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&item=350421486662&ssPageName=STRK:MEWNX:IT#ht_4972wt_1140
che si collegherebbe all'ISP dell'UNO, ma non state dicendo che non funziona lo stesso? Ammesso che funzioni con che software lo gestirei? non credo col programmer di Arduino. E poi dove potrei prendere i bootloader da caricare nel chip?
Dovendo comprare questo del link alla fine sarebbero 7-8 euro di differenza con la 2009, a parte il minimo risparmio, ne avrei davvero vantaggi tecnici nel tempo?
Grazie.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

#70
Mar 13, 2011, 12:42 am Last Edit: Mar 13, 2011, 12:48 am by leo72 Reason: 1
Se devi scrivere solo il bootloader, allora puoi usare il metodo dell'Arduino standalone, ovvero mettere un chip Atmega su una breadboard, aggiungerci il clock, i condensatori, la resistenza, collegare il tutto alla 2009 ed usare questa per programmare il micro.

Detto questo un programmatore funziona con qualunque scheda, sia essa 2009 che Uno semplicemente perché... usa l'Arduino come appoggio per il chip, bypassando la circuiteria della scheda e collegandosi tramite il connettore ICSP direttamente al micro. Quindi, in pratica, usi l'Arduino come sostituto di una schedina esterna preassemblata allo scopo.
Nel programmatore che hai messo attento che ti manca il cavetto per collegare il programmatore stesso all'Arduino. Attento anche che vedo il programmatore con un connettore ICSP a 10 pin ma il connettore sull'Arduino è da 6 pin. Scusa ma ho detto una castroneria. Mi pareva un connettore da 10 pin, difatti non aveva senso mettere un cavetto a 6 pin... Sarà l'ora tarda  :D
Io personalmente ho preso l'USBtinyISP da Adafruit. E' comodissimo ed è supportato anche dall'IDE di Arduino.

Parlando di come usarlo, lo puoi usare direttamente dall'IDE di Arduino, se è di un tipo supportato, per programmare il bootloader su un chip vergine oppure lo puoi usare da terminale con avr-dude per programmare i fuse e/o direttamente i programmi all'interno di un micro anche senza bootloader.

Michele Menniti

OK,ora è tutto abbastanza chiaro  :) domani a mente "sveglia" deciderò cosa fare.
Grazie di tutto leo.
'notte
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Michele Menniti

#72
Mar 16, 2011, 11:07 pm Last Edit: Mar 17, 2011, 09:09 am by menniti Reason: 1
Allora, grazie a tutti coloro che mi hanno aiutato ho finalmente realizzato il circuito che mi serviva, e funziona benissimo; l'hardware, suggeritomi da astrobeed, consta di 3 (ho limitato la banda a 24 bit) 74HC4094 (shift register con memoria) e 2 74HC00, uno per i vari segnali di controllo e l'altro perché mi è piaciuto realizzare un oscillatore quarzato a 10MHz invece del solito mattoncino. Inoltre ho aggiunto un dip switch a 4 vie col quale prelevo in uscita, una volta caricati i 24 bit, rispettivamente 8, 12, 16 e 24 bit.
Un solo problema ce l'ho sul programma, sono impazzito per capirlo finché non ho iniziato a salvare tutte le sequenze sotto forma di commenti; in pratica se la sequenza è di 24 bit NON posso terminarla in nessun caso con 1 perché altrimenti l'uscita del circuito va alta in  modo fisso; credo di dover ritardare un segnale ma non riesco a capire cosa devo fare.
Code: [Select]
#define DATA 12
#define ENABLE 13
#define CLOCK 8
byte sequenza[] = {
      //0,0,0,0,0,0,0,1};
      //1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};
      //0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0};
      //1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0};
      //1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0};
      1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0};
     
void setup() {               
  pinMode(DATA, OUTPUT);  // attivo le uscite
  pinMode(ENABLE, OUTPUT);
  pinMode (CLOCK, OUTPUT);
  digitalWrite(ENABLE, LOW); //blocco tutto
  digitalWrite(DATA, HIGH);
  digitalWrite(CLOCK, HIGH);
  for(int k=0; k<24; k++)
  {
    sequenza[k] ^= 1; // inverto i segnali per compensare l'uscita invertita del circuito
  }
}
void loop()
  {
  digitalWrite(ENABLE, LOW); // fermo il ciclo shift
   for(int i=0; i<24; i++)  //ciclo per 24 bit
  {
    digitalWrite(DATA, sequenza[i]);
    digitalWrite(CLOCK, LOW);
    delay (25);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(ENABLE, HIGH); //riavvio tutto
  digitalWrite(DATA, HIGH);
  digitalWrite(CLOCK, HIGH);
  while(1);  // loop infinito e blocca il ciclo.
}


Naturalmente questo post non voleva essere solo una segnalazione di successo, alla fine di tutto posterò sia lo schema elettrico definitivo che il programma; consideratela anche una accorata richiesta d'aiuto  :~
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Michele Menniti

Salve a tutti,
qualcuno di buona volontà mi aiuterebbe a trovare l'inghippo descritto al mio precedente post?
Grazie.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

astrobeed

Non è che per caso stai facendo il ricircolo a 24 bit tramite Q8, invece di QS, del terzo shift register ?

Go Up