programmare il 644 ... ma come????

leo72:
In questo modo non leggerai nulla di valido, o per meglio dire otterrai il valore di pin PB4..PB7 sui primi 4 bit.
Uno shift è uno scorrimento, se scorri 1 byte di 4 posizioni verso destra perdi il valore dei primi 4 bit meno significativi, su cui troverai il valore dei 4 bit più significativi.
Esempio:
byte 11000011
Se fai byte >> 4 poi byte vale 00001100(0011) perché i bit 0011 sono usciti da destra, e li hai persi.

devo leggere i 4 bit di informazionepresenti nei primi 4 PIN della porta B del 644, ovvero
D0 1|
D1 2|
D2 3|
D3 4|

  • quindi quando leggo la porta B, il D0 è il meno significativo!! giusto?

per l'utilizzo della seriale ....

Non dipende da come programmi il chip ma dal fatto che tu usi o meno la seriale nel tuo sketch.

si. la seriale la uso. ma nella connessione per la programmazione ho la connessione ISP, non quella seriale. Siccome non sono riuscito a ricevere dati nel serial monitor ne ho dedotto che la connessione ISP non consente ai dati seriali di raggiungere il serial monitor.. quindi niente debug....
pensavo di collegare direttamete il tx del 644 al rx dell'arduino usato come programatore ISP e viceversa per il rx <-- tx ..

circa questo

No, la seconda seriale esiste solo sul 1284.
Mi sa che ti devi leggere il datasheet della famiglia 344/644/1284 prima di continuare.

il problema e con l'inglese ....

e per questo:

Studia.

.. il problema è sempre con l'inglese!!!! ... ma grazie di tutto, anche del consiglio!!! :wink:

Giusto! (metto il "!" visto che a te piacciono i punti esclamativi :P)
Però tu scrivevi prima che volevi fare uno shift, perché?
Se shifti di 4 posizioni la lettura dei primi 4 bit, li perdi. Questo lo hai capito? Non rispondi alle mie domande...

Ma tu cosa intendi fare? Leggere solo i primi 4 bit di quella porta?

per l'utilizzo della seriale ....

Non dipende da come programmi il chip ma dal fatto che tu usi o meno la seriale nel tuo sketch.

si. la seriale la uso. ma nella connessione per la programmazione ho la connessione ISP, non quella seriale. Siccome non sono riuscito a ricevere dati nel serial monitor ne ho dedotto che la connessione ISP non consente ai dati seriali di raggiungere il serial monitor.. quindi niente debug....

La connessione SPI serve per la programmazione: SPI = Serial Programming Interface.
La linea SPI non la puoi usare per l'invio dei dati. Una volta programmato il chip, devi approntare la connessione seriale.

pensavo di collegare direttamete il tx del 644 al rx dell'arduino usato come programatore ISP e viceversa per il rx <-- tx ..

Appunto. SPI è una cosa, seriale è un'altra.

No, la seconda seriale esiste solo sul 1284.
Mi sa che ti devi leggere il datasheet della famiglia 344/644/1284 prima di continuare.

il problema e con l'inglese ....

e per questo:

Studia.

.. il problema è sempre con l'inglese!!!! ... ma grazie di tutto, anche del consiglio!!! :wink:

Se aspetti che Atmel rilasci un datasheet in italiano, fai prima a cambiare hobby :wink:
Tutti i datasheet, anche quelli dei componenti, sono scritti tutti in inglese. Un minimo di conoscenza della lingua ti serve, altrimenti non ti puoi muovere.

Ciao leo.... innanzitutto scusami perchè mi sembra che sto mettendo a dura prova la tua pazienza ...

leo72:
Esempio:
byte 11000011
Se fai byte >> 4 poi byte vale 00001100(0011) perché i bit 0011 sono usciti da destra, e li hai persi.
Questo lo hai capito? Non rispondi alle mie domande...
Ma tu cosa intendi fare? Leggere solo i primi 4 bit di quella porta?

Si esatto devo leggere solo i primi 4 bit e ricavare il valore contenuto dai primi 4 bit (tra 0 e 15) ....
ciò perchè ho deciso di usare i primi quattro pin della porta B, se avessi usato i pin dal 4 al 7 avrei dovito fare il bitwise con 00001111 ... e non fare nessuno shift. almeno così mi pare di avere capito!!!!

Se aspetti che Atmel rilasci un datasheet in italiano, fai prima a cambiare hobby :wink:
Tutti i datasheet, anche quelli dei componenti, sono scritti tutti in inglese. Un minimo di conoscenza della lingua ti serve, altrimenti non ti puoi muovere.

si... qualcosa cerco di leggere ma arrivo fin dove posso..... per il resto leggo a destra e a manca.... dove capita...
grazie comunque...

E' alla rovescia... Comunque tutto dipende da dove vuoi avere quei 4 bit. Se li vuoi avere nelle prime 4 posizioni di una variabile, allora leggi la porta e basta.
Ti ricordo che esistono anche istruzioni appositamente scritte per chi è un po' a digiuno in fatto di manipolazione dei singoli bit. Leggi questa:
http://arduino.cc/en/Reference/Bit
e le funzioni linkate in fondo.

Non credo si tratti di pazienza, e che se non hai capito serve spiegare quel concetto con altri esempi, ovviamente a te serve arrivare all'obiettivo e sacrifichi volentieri di imparare le operazioni di shift.

Se prenti 8 bit
7 0
1111 1111

Il bit 0 e il meno significativo, mentre il 7 e più significativo. Per prelevare il valore dei primi 4 bit (0-4) serve impostare i bit 5-7 tutti a zero, oppure fare un operazione logica di and tra il numero x è una maschera.

La maschera in questo caso equivale al numero 15 che in binario significa impostare i primi 4 bit ad 1, così 0000 1111.

L'operazione and sarà simile a questa:
x = 0110 0110 (102 decimale)
result = x & 15
o se preferisci in formato esadecimale:
x = 0x66
result = x & 0xf

result conterrà il valore 6.

Ciao.

Per Mauro....

in realtà come fare ed usare le operazoini di bitwise l'ho capito e lo sto usando regolarmente in diversi progetti .... il mio dubbio, probabilmente perchè non mi sono spiegato a sufficienza, consisteva in questo:
.. siccome sto prelevando 4 bit dalla porta B del 644, a partire dal pin1 (D0), il mio dubbio era:

  • sto prelevando questo: 11110000
  • oppure questo: 00001111 ...
    poi per trattarli con il bitwise per estrarre ciò che mi serve, credo di arrangiarmi, me l'avete spiegato voi stessi in molti altri post....

ad ogni buon conto ringrazio per la gentile disponibilità....

io capisco che a chi è esperto e pratico le domande banali, magari su argomenti affrontati decine di volte, rischiano di urtare, ma chi ha bisogno chiede ... gentilmente e senza nessuna pretesa. Poi se uno ritiene di rispondere, innazitutto lo ringrazio, poi interloquisco, chiedo chiarimenti... sempre fintanto che all'interlocutore gli và di rispondere .....
ciao

Non stai urtando nessuno, poi ognuno ha i propri modi per rispondere, se gli va... devi però abituarti ad essere un po' più sintetico e chiaro e soprattutto a fare attenzione a ciò che ti si chiede, serve per capire meglio la problematica, se pensi solo a chiedere e mai a rispondere poi diventa difficile aiutarti, nessuno riesce a leggere nel pensiero ecco perché la chiarezza è fondamentale. Ciao :slight_smile:

Condivido il pensiero di Menniti.

Non credo si tratti di pazienza, e che se non hai capito serve spiegare quel concetto con altri esempi, ovviamente a te serve arrivare all'obiettivo e sacrifichi volentieri di imparare le operazioni di shift.

Quello sopra è un mio pensiero che non è detto corrisponda a verità

in realtà come fare ed usare le operazoini di bitwise l'ho capito e lo sto usando regolarmente in diversi progetti .... il mio dubbio, probabilmente perchè non mi sono spiegato a sufficienza, consisteva in questo:
.. siccome sto prelevando 4 bit dalla porta B del 644, a partire dal pin1 (D0), il mio dubbio era:

  • sto prelevando questo: 11110000
  • oppure questo: 00001111 ...
    poi per trattarli con il bitwise per estrarre ciò che mi serve, credo di arrangiarmi, me l'avete spiegato voi stessi in molti altri post....

Ho capito male io allora, sembrava non fossi in grado di estrapolare i primi 4 bit meno significativi.

Ti consiglio di procurarti un software con al funzione di calcolatrice binaria, io uso quello in dotazione a GNOME di GNU/Linux, che mi permette di fare il bitwise e vedere subito il risultato sia in decimale, esa e binario. Quando invece devo testare molte bitwise e cose più complicate uso scrivere un programma di test in C/C++ che poi faccio girare sul pc, così evito di scrivere in flash.

io capisco che a chi è esperto e pratico le domande banali, magari su argomenti affrontati decine di volte, rischiano di urtare, ma chi ha bisogno chiede ... gentilmente e senza nessuna pretesa. Poi se uno ritiene di rispondere, innazitutto lo ringrazio, poi interloquisco, chiedo chiarimenti... sempre fintanto che all'interlocutore gli và di rispondere .....

Condivido in pieno, ma alle volte non va di rispondere con una soluzione, ma viene voglia di fare il professore, spiegando nel dettaglio. Sai, se c'è un altro, oltre a me, che sa quello che so io, ci sono più probabilità che questo risponda al posto mio, e così è stato fino a oggi.

Ciao.

Ti avevo già risposto a questo quesito. Il bit meno significativo è quello più a destra. Quindi se leggi D0/D1/D2 ecc... i bit saranno il 1° il 2°, il 3° ecc... del byte in cui li metti.
Nel tuo caso, la seconda risposta: 00001111

Chiedo scusa per il ritardo .. ma ieri ed non mi sono potuto collegare ...

per Michele

non mi ero accorto di non aver risposto a qualcosae mi scuso per questo!! ... si, certamente cerco di essere sempre sintetico al massimo e, di conseguenza, mi rendo conto che questo non faciliti il compito di chi potrebbe darmi una risposta. Certamente gli sarebbe più facile se avesse ben chiaro il pensiero di chi chiede, cosa esattamente ha fatto, cosa sta facendo, cosa ha capito etc.... ..

MauroTec:

io capisco che a chi è esperto e pratico le domande banali, magari su argomenti affrontati decine di volte, rischiano di urtare, ma chi ha bisogno chiede ... gentilmente e senza nessuna pretesa. Poi se uno ritiene di rispondere, innazitutto lo ringrazio, poi interloquisco, chiedo chiarimenti... sempre fintanto che all'interlocutore gli và di rispondere .....

Condivido in pieno, ma alle volte non va di rispondere con una soluzione, ma viene voglia di fare il professore, spiegando nel dettaglio. Sai, se c'è un altro, oltre a me, che sa quello che so io, ci sono più probabilità che questo risponda al posto mio, e così è stato fino a oggi.
Ciao.

... si ma io apprezzo comunque chi oltre alla risposta semplice e diretta mi da anche spiegazioni, spunti per leggere e capire magari più approfonditamente. Nessun problema insomma. Solo apprezzamenti. E' solo che dal tono di qualche risposta avevo percepito, come dire, che un leggero disturbo aveva afflitto i polpastrelli di chi digitava la risposta in quel momento ... (scherzo naturalmnete ... :wink: ... ma qui si rischia di uscire OT ....)
Comunque voglio ribadire il mio ringraziamento per quegli utenti particolarmente attivi in questo forum che regolarmenmte affrontano e risolvono i più banali problemi di noi dilettanti, .... e che fanno in tempo a rispondere a tutti.

Per Leonardo

leo72:
Ti avevo già risposto a questo quesito. Il bit meno significativo è quello più a destra. Quindi se leggi D0/D1/D2 ecc... i bit saranno il 1° il 2°, il 3° ecc... del byte in cui li metti.
Nel tuo caso, la seconda risposta: 00001111

... si Leo grazie ora ho capito bene!!!!

Ancora:
Ho fatto la conversione di buona parte dello script per il 644 .. ma ci sono ancora parti che non riesco a fare funzionare.. in particlolare il serial monitor e la prigrammazione via seriale... ma credo che sia meglio aprire un altro topic .. che ne dite?

Questo funziona solo se usi un convertitore USB/seriale altrimenti i dati tra il PC ed il micro non puoi gestirli.
Basterebbe anche l'Arduino, basta sfilare l'Atmega328.

e la prigrammazione via seriale... ma credo che sia meglio aprire un altro topic .. che ne dite?

Senza bootloader sul chip non puoi farlo. Se hai scaricato il mio package, dentro trovi anche un bootloader per il 644 già compilato. Prova ad usarlo. Se non ricordo male, dovrebbe essere compilato per i 16 MHz, se ti serve un'altra frequenza devi ricompilarlo.

Se non riesci a dialogare col serial monitor ovvio che non riuscirai nemmeno a programmare via seriale; forse conviene restare su questo Topic, almeno per ora.
Dunque, facciamo questa prova facile facile:
1 - Carica uno sketch che invia dati alla seriale in continuazione, senza intervento umano, magari i numeri da 1 a 1000 e poi ricomincia....; togli alimentazione al micro.
2 - Ad ognuno dei tre pin TX delle tre seriali del 644 collega una R da 330 ohm o maggiore (non superiore a 1kohm)
3 - All'altro capo delle R collega l'anodo di un LED, i catodi dei tre LED tutti a GND
4 - ridai alimentazione al micro, uno dei tre LED dovrebbe dare segno di vita, se è così poi vediamo come procedere. :slight_smile:

Il 644P ha 2 seriali (il 644 non P ne ha 1 sola).

@Paolo:
scusa, perché altrimenti ci perdiamo per strada....
facciamo (anzi, facci) un riassunto di cos'hai fatto fino ad ora?
L'HW che hai provato, il SW che stai usando ecc..

A me la programmazione dei 644P via ISP o seriale funziona, quindi c'è un problema da te che dobbiamo individuare, ma se continuiamo a fare proposte senza capire come tu ti stia muovendo mi sa che non arriviamo a nulla :wink:

Quindi, io partirei dal caricare lo sketch ArduinoISP sull'Arduino UNO. Poi chiudi l'IDE.
Ora il mio core 644_1284: scaricalo (prendi la versione per IDE 1.0.2 sia per l'IDE 1.0.2 che per l'IDE 1.0.3) ed installalo.
Avvia l'IDE, seleziona "Atmega644 @ 16 MHz w/bootloader" e poi scrivi il bootloader sul microcontrollore (così imposti anche i fuse corretti per lavorare a 16 MHz e riservare l'area al bootloader) con la tecnica ISP usando l'ArduinoISP come programmatore.
Adesso prenditi l'Arduino (lasciamo per ora da parte il tuo convertitore USB/seriale), staccagli il chip e fai questi collegamenti:
Arduino ---> 644P
Pin RST ---> pin 9
Pin RX ---> pin 15
Pin TX ---> pin 14
Pin 5V ---> pin 10 e 30
Pin GND ---> pin 11 e 31

Collega l'Arduino, apri l'IDE, poi scegli la voce "Atmega 644 @ 16 MHz w/bootloader", carica lo sketch Blink e spedisci con l'icona di upload. Adesso prendi un LED + R e collegali al pin 19 del 644: se il bootloader ha svolto il suo compito, lo sketch Blink dev'essere sul micro ed il LED deve lampeggiare.

leo72:

[quote author=Michele Menniti link=topic=136740.msg1034614#msg1034614 date=1355670909]
2 - Ad ognuno dei tre pin TX delle tre seriali del 644 collega una R da 330 ohm o maggiore (non superiore a 1kohm)

Il 644P ha 2 seriali (il 644 non P ne ha 1 sola).

[/quote]
sì, grazie, una svista, ho scritto "tre pin TX delle tre seriali

leo72:
Questo funziona solo se usi un convertitore USB/seriale altrimenti i dati tra il PC ed il micro non puoi gestirli.
Basterebbe anche l'Arduino, basta sfilare l'Atmega328.
.....
.....
Senza bootloader sul chip non puoi farlo. ....

Ho provato usando il convertitore USB seriale con i collegamenti come dal post precedente di Michele..
Ho anche provato usando la tecnica seriale della guida di Michele;
Ho anche provato usando arduino uno, caricando uno script quasi vuoto, cioè con il setup imposto i pin 0 e 1 come input, e poi faccio eseguire un loop vuoto. collegando tx --> rx e rx <-- tx (644 - 328). Lo usavo er ricevere le stringhe NMEA dal ricevitore GPS e funzionava ... ma niente .. qui appare qualcosa nel serial monitor ma sembrano solo bestemmio. Naturlmente ho settato e provato con tutti i valori di bps. Ho anche verificato che il quarzo del 644 fosse da 16 Mhz... (sull'involucro cè stampigliato 16).

Credo che il bootloader ci sia... ho fatto anche la modifica da te suggerita per fare flashare il 2 pin .. ho messo uil valore 5 (credo 5 flash) .. ma è rapidissimo.... si vede che flasha ma non saprei dirti se sono 5 ....

Per le prove che mi hai suggerito di fare non potro farle prima di stasera ....

.. starera michele... poi scrivo dei risultati.. .. interessante comunque la tecnica per vedere se cè attivita tx RX ... : Magari si potrebbe inserire in modo stabile nel prpgetto???... potrebbe essere utile per il debug etc... ???.. che ne dici?

leo72:

[quote author=Michele Menniti link=topic=136740.msg1034614#msg1034614 date=1355670909]
2 - Ad ognuno dei tre pin TX delle tre seriali del 644 collega una R da 330 ohm o maggiore (non superiore a 1kohm)

Il 644P ha 2 seriali (il 644 non P ne ha 1 sola).
[/quote]

io ho il 644PA .. ma sto usando sempre le rx0 e tx0 (pin 14 e 15 del micro 644)

leo72:
@Paolo:
scusa, perché altrimenti ci perdiamo per strada....
facciamo (anzi, facci) un riassunto di cos'hai fatto fino ad ora?
L'HW che hai provato, il SW che stai usando ecc..

Ardware usato: -arduino UNo con botloader origianle; -644PA
software: IDE 1.0.2 aggiornato con il tuo package per il 644

leo72:
Quindi, io partirei dal caricare lo sketch ArduinoISP sull'Arduino UNO. Poi chiudi l'IDE.
Ora il mio core 644_1284: scaricalo (prendi la versione per IDE 1.0.2 sia per l'IDE 1.0.2 che per l'IDE 1.0.3) ed installalo.
Avvia l'IDE, seleziona "Atmega644 @ 16 MHz w/bootloader" e poi scrivi il bootloader sul microcontrollore (così imposti anche i fuse corretti per lavorare a 16 MHz e riservare l'area al bootloader) con la tecnica ISP usando l'ArduinoISP come programmatore.

.. direi che tutto questo l'ho fatto e funzione .. ho anche fatto flashare il pin 2 come detto prima ..
aggiungo anche che faccio l'upload dello script così:

  • carico lo script nell'IDE
  • seleziono la scheda di destinazoine: Atmega644 @ 16 MHz w/ISP ...
  • seleziono programmatore: arduino as ISP
    poi faccio l'upload .. dal menu file --> carica con un programmatore. Qui evidenzio che se uso il tasto per l'upload sulla barra dei comandi mi dà un errore e non carica. Non sò forse questa informazione è rilevante ..

leo72:
Adesso prenditi l'Arduino (lasciamo per ora da parte il tuo convertitore USB/seriale), staccagli il chip e fai questi collegamenti:...
......

in realtà ho già provato.. stasera riprovo.

aggiungo questa infomarzione:
Tra le varie prove che ho fatto, solo sull'arduino UNO (non sul 644) ... ho provato ad eseguire lo schetc
esempi--> communication--> ASCIItable.. e non mi funziona sull'ide 1.02 e nenche sull'1.01. ma fuunziona sull'ide 022..
non sò forse è rilevante??.. bho=???
più tardi vedro le vs risposte...

ciao e grazie

Guarda che "Atmega644 @ 16 MHz w/Arduino as ISP" non è la stessa cosa di quello che ti ho detto io, "Atmega644 @ 16 MHz w/bootloader".
Nel primo caso non viene riservato spazio al bootloader per cui riflashando il micro il bootloader potrebbe venir sovrascritto.
La voce che ti ho invece consigliato riserva 1 kB di Flash per il bootloader, quindi questo resta protetto anche nelle successive scritture

leo72:
Guarda che "Atmega644 @ 16 MHz w/Arduino as ISP" non è la stessa cosa di quello che ti ho detto io, "Atmega644 @ 16 MHz w/bootloader".
Nel primo caso non viene riservato spazio al bootloader per cui riflashando il micro il bootloader potrebbe venir sovrascritto.
La voce che ti ho invece consigliato riserva 1 kB di Flash per il bootloader, quindi questo resta protetto anche nelle successive scritture

si,, ho sbagliato scrivendo....
Atmega644 @ 16 MHz w/bootloader ... l'ho utilizzato per tasferire il bootloader
Atmega644 @ 16 MHz w/Arduino as ISP ... lo stavo utilizzando per trasferire gli schetc

Comunque in tutto questo marasma di problemi con il 644 ci sono anche note positive.
Ho convertito tutto lo schetch ed ora funziona tutto (eccezion fatta per il serial monitor .. che usavo per il debug)...
.. insomma ho convertito tutto il lavoro fatto e funziona benissimo anche sul 644, ora ho i pin in più per aggiungere le altre implementazioni ...

Ma hai provato ad usare l'Arduino smontando il chip come ponte USB/seriale come ti avevo detto?