Pages: 1 2 [3] 4 5 ... 25   Go Down
Author Topic: programmare il 644 ... ma come????  (Read 15710 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

e questo fa lampeggiare un LED? quale?
E' scritto nel file pins_def.h presente nella stessa cartella. Per il 644/1284 si tratta del pin PB1, che sarebbe il 2° piedino.

per Paolo non per me, se attiva quella riga senza collegare nulla all'esterno non si accorgerà comunque di niente smiley
Beh, questo è scontato  smiley-wink
Cmq era stato domandato come poter avere la certezza che il bootloader fosse stato caricato correttamente e stesse funzionando, quello è il modo più semplice, che sfrutta lo stesso codice del bootloader.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

infatti è perfetto, abbiamo fatto tutto sto casino solo perché intendevo dirti che accanto al suggerimento potevi dirgli direttamente che doveva collegare un led al pin 2 tramite una R in serie smiley-grin
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma così non gli davo il suggerimento di andare a studiarsi il core che ha scaricato. Invece così sa che ci sono dei file che fanno alcune cose, che quei file li può modificare e che modificandoli può personalizzarsi il core.
Diciamo che stasera mi sento molto insegnante, va' ... sarà che a forza di ragionare con te mi sto professorizzando  smiley-yell
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma così non gli davo il suggerimento di andare a studiarsi il core che ha scaricato. Invece così sa che ci sono dei file che fanno alcune cose, che quei file li può modificare e che modificandoli può personalizzarsi il core.
Diciamo che stasera mi sento molto insegnante, va' ... sarà che a forza di ragionare con te mi sto professorizzando  smiley-yell
Ottimo, caro collega, concordo con la Sua disquisizione, da approfondire in sede opportuna smiley-lol
Logged

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

Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per gli "spiegoni" ... ad entrambi naturalmente.
Ma se siete d'accordo continuerei con le domande!!!!

sul 328, in una parte del codice, leggevo i 4 bit della porta D così:
Code:
charDTMF_value = (PIND)>>4;   // legge i bit della porta D e shifta a destra di 4 (estrae un valore tra 0 e 15)

adesso nel 644 volevo collegarlo ai primi PIN della porta B, ovvero:
           
Code:
PCINT8/(D0 ) PB0  1|   
            PCINT9/(D1 ) PB1  2|
   PCINT10/INT2 (D2 ) PB2  3|
  PCINT11/OC0A (D3 ) PB3  4|

nel 644 dovrei leggerlo così
Code:
charDTMF_value = (PINB)>>4;   // legge i bit della porta B e shifta a destra di 4 (estrae un valore tra 0 e 15)

.. ma mi sfugge quale dei bit è più significativo e quale no... insomma ddevo shiftare di 4 posti o no? siccome non riesco a farlo funzionare...

un'altra cosa:
- per fare il debug devo fare funzionare il serial monitor... siccome la programmazione la faccio tramite ISP .. niente serial monitor!!! giusto?
 
ed ancora:
- la funzione che legge  questo: "charDTMF_value = (PINB)>>4" è attivata con l'interrupt che sul 644 ho messo sul n° 0,
PCINT26/INT0/RX1 (D10) PD2 16 (dalla mappattura dei PIN del 644)
cioè il PIN 16 del microcontrollore, dove cè anche il RX1...
quindi siccome ci sono funzioni che inviano dati anche alla seriale, è possibile che il fatto che sia attivita RX sul pin 16 mandi a quel paese l'interrupt?

suggerimenti??... consigli???



Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per gli "spiegoni" ... ad entrambi naturalmente.
adesso nel 644 volevo collegarlo ai primi PIN della porta B, ovvero:
           
Code:
PCINT8/(D0 ) PB0  1|   
            PCINT9/(D1 ) PB1  2|
   PCINT10/INT2 (D2 ) PB2  3|
  PCINT11/OC0A (D3 ) PB3  4|

nel 644 dovrei leggerlo così
Code:
charDTMF_value = (PINB)>>4;   // legge i bit della porta B e shifta a destra di 4 (estrae un valore tra 0 e 15)
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.

Quote
.. ma mi sfugge quale dei bit è più significativo e quale no... insomma ddevo shiftare di 4 posti o no? siccome non riesco a farlo funzionare...
Il "peso" dei bit si misura da sinistra a destra.
76543210
Quindi il bit 7 è quello più significativo, il bit 0 quello meno significativo.
Ma tu cosa intendi fare? Leggere solo i primi 4 bit di quella porta?
Allora usa un AND bit a bit.
Fai PINB & 0b0001111, in questo modo ti verranno restituiti solo i 4 bit a destra, perdendo gli altri.

Quote
un'altra cosa:
- per fare il debug devo fare funzionare il serial monitor... siccome la programmazione la faccio tramite ISP .. niente serial monitor!!! giusto?
Non dipende da come programmi il chip ma dal fatto che tu usi o meno la seriale nel tuo sketch.

Quote

ed ancora:
- la funzione che legge  questo: "charDTMF_value = (PINB)>>4" è attivata con l'interrupt che sul 644 ho messo sul n° 0,
PCINT26/INT0/RX1 (D10) PD2 16 (dalla mappattura dei PIN del 644)
cioè il PIN 16 del microcontrollore, dove cè anche il RX1...
No, la seconda seriale esiste solo sul 1284.
Mi sa che ti devi leggere il datasheet della famiglia 344/644/1284 prima di continuare.

Quote
quindi siccome ci sono funzioni che inviano dati anche alla seriale, è possibile che il fatto che sia attivita RX sul pin 16 mandi a quel paese l'interrupt?

suggerimenti??... consigli???
Studia.
Logged


Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ....
Quote
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
Quote
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:
Quote
Studia.
.. il problema è sempre con l'inglese!!!! ... ma grazie di tutto, anche del consiglio!!!  smiley-wink

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Giusto! (metto il "!" visto che a te piacciono i punti esclamativi  smiley-razz)
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...
Quote
Ma tu cosa intendi fare? Leggere solo i primi 4 bit di quella porta?

Quote
per l'utilizzo della seriale ....
Quote
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.

Quote
pensavo di collegare direttamete il tx del 644 al rx dell'arduino usato come programatore ISP  e viceversa per il rx <-- tx ..
Quote
Appunto. SPI è una cosa, seriale è un'altra.

Quote
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:
Quote
Studia.
.. il problema è sempre con l'inglese!!!! ... ma grazie di tutto, anche del consiglio!!!  smiley-wink


Se aspetti che Atmel rilasci un datasheet in italiano, fai prima a cambiare hobby  smiley-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.
Logged


Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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!!!!

Quote
Se aspetti che Atmel rilasci un datasheet in italiano, fai prima a cambiare hobby  smiley-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...
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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!!!!
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.
Logged


0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2793
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 

 
« Last Edit: December 14, 2012, 11:37:47 am by Paolo S » Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

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

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2793
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Condivido il pensiero di Menniti.

Quote
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à

Quote
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.

Quote
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.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

.. 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  ...
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
Logged


Pages: 1 2 [3] 4 5 ... 25   Go Up
Jump to: