uhm no questo no...provo subito
EDIT: continua a non funzionare anche con OE su 3.3v
uhm no questo no...provo subito
EDIT: continua a non funzionare anche con OE su 3.3v
Allora appena fatti i test con l'oscilloscopio...MISO, MOSI e SCK hanno un onda mentre gli altri pin no ma credo sia normale.
A questo punto non so che dire...
... mah, a questo punto metteri le mai nella libreria ed aggiungerei dei Serial.print() di diagnosi ... ad esempio, se prendiamo il modulo .cpp, alla riga 127 sarebbe interessante conoscere il valore della variabile 'version' perché, basta che quel modulo ritorni un valore diverso da 0x12 che la libreria non va più bene ...
Guglielmo
Okay, quindi devo leggere il registro 0x12 nel codice di arduino creato da me?
NO, devi prendere i sorgenti della libreria che hai installato, salvarli (così conservi gli originali) e lavorare dentro a quelli installati per inserire TUTTI i Serial.print() che possono essere necessari mano mano che si va avanti
Guglielmo
Ok forse ho capito...nel file .cpp della libreria inserisco dei serial.print() per vedere i valori. Poi salvo tutto e riprovo il codice che usa quella libreria...teoricamente oltre agli output del codice dovrei avere quelli della libreria? Oppure devo far girare la libreria da sola e se si in che modo?
Perdona le domande forse banali ma non ho mai messo mano a una libreria.
Lucio
In realtà le librerie dell'IDE Arduino NON sono delle vere librerie, ma sono solo dei sorgenti che vengono compilati al momento ed aggiunti al tuo codice, quindi ... SI, se inserisci delle Serial.print() dentro la libreria, quando il tuo programma girerà, richiamando le funzioni della libreria, che sarà modificata per fare stampe di debug, stamperà quell che avrai messo in stampa ... ora cominciamo con la variabile 'version ', ma magari, mano mano, ci serve stampare anche altre cose
NO, non puoi, essendo solo un insime di classi e metodi .. ci vuole qualcuno che istanzi le classi e chiami i metodi
Ribadisco, nell'IDE di Arduino, immagina la libreria come dell'ulteriore codice che fa parte del tuo programma e che qualcuno ha già scritto e reso disponibile ... tu, invece che riscriverlo da capo, semplicemente dici all'IDE di aggiungere, ai tuoi sorgenti, i sorgenti che fanno parde della libreria e di generare quindi un unico eseguibile.
Guglielmo
Ottimo, ora ho tutto chiaro...è un po' come l'avevo immaginato ma non ero per nulla sicuro.
Dunque ho aggiunto il print della variabile e ho questi risultati (in foto)...misà che è colpa del modulo. L'unico dubbio che 0x12 è HEX mentre il numero che mi da indietro è decimale, può voler dire qualcosa?
Lucio
255 è 0xFF ... direi che il modulo o non capisce la domanda o non sta rispondendo e comunque sul bus SPI non arriva nulla (rimane fisso a HIGH per tutti gli 8 bit).
Guglielmo
Scusa, nelle note della libreria c'è scritto:
- Some boards (like the Arduino Nano), cannot supply enough current for the SX127x in TX mode. This will cause lockups when sending, be sure to use an external 3.3V supply that can provide at least 120mA's when using these boards.
- If your Arduino board operates at 5V, like the Arduino Uno, Leonardo or Mega, you will need to use a level converter for the wiring to the Semtech SX127x module. Most Semtech SX127x breakout boards do not have logic level converters built-in.
Per il punto 2 abbiamo chiarito, ma per il primo punto ... da DOVE stai prendendo i 3.3V per alimentare il modulo? Perché, il regolatore di Arduino UNO è in grado di dare al massimo 40/50mA ... se quel modulo veramente assorbe 120mA ... non ce la farà mai !!!
Guglielmo
Un altra cosa ... tu dici che va bene "433E6" ... la libreria dichiara:
6) Which frequencies can I use?
You can use this table to lookup the available frequencies by your country. The selectable frequency also depends on your hardware. You can lookup the data sheet or ask your supplier.
Please also notice the frequency dependent duty cycles for legal reasons!
E, se si segue il link alla tabella, si vede che per l'Italia accetta:
Italy EU863-870, EU433 (CEPT Rec. 70-03)
... quindi, comunque, secondo me, indipendentemente da altri problemi, quel valore che metti tu non viene accettato e il modulo difficilmente può funzionare
Guglielmo
Allora li stavo prendendo dall'arduino...ora ho aggiunto un alimentatore di quelli "da breadboard" che dovrebbe dare circa 100 mA. Ho riprovato e comunque non va.
Lucio
Ora faccio una prova con Eu433...vediamo che succede
EDIT: così neanche compila, lo da come non dichiarato.
Lucio
EU433 maiuscolo ... da errore ?
Guglielmo
Si esatto
Non capisco ... nei sorgneti della libreria NON trovo le varie definizioni ... dove diavolo le va a pescare?
il metodo begin() vuole:
int LoRaClass::begin(long frequency)
... quindi un 'long' ... dove solo le #define delle varie frequenze ???
Non solo ... se all'interno del modulo .cpp si cerca SS_PIN appare solo una vola in:
LoRaClass::LoRaClass() :
_spiSettings(LORA_DEFAULT_SPI_FREQUENCY, MSBFIRST, SPI_MODE0),
_spi(&LORA_DEFAULT_SPI),
_ss(LORA_DEFAULT_SS_PIN), _reset(LORA_DEFAULT_RESET_PIN), _dio0(LORA_DEFAULT_DIO0_PIN),
_frequency(0),
_packetIndex(0),
_implicitHeaderMode(0),
_onReceive(NULL),
_onCadDone(NULL),
_onTxDone(NULL)
{
// overide Stream timeout value
setTimeout(0);
}
ma poi NON lo usa mai e ... NON è possibile, per usare il bus SPI devi portare LOW il pin SS e poi riportarlo HIGH ... non capisco veramente come quella libreria possa funzionare ...
Guglielmo
Ah bè allora mi sento rassicurato...se non lo sai tu che sei esperto di certo non lo so io
Solo che non saprei con che cosa sostituirla...
Lucio
Ok, questa l'ho capita, contrariamente alle altre librerie che vogliono lo standrad che usi, qui vuole veramente un numero 'long' e 433E6 è 433 x 10 6 ovvero in notazione esponenziale.
Continuo a non capire la mancanza della gestione del pin SS ...
Guglielmo
Allora nel datasheet del ATmega328P troviamo:
The interconnection between Master and Slave CPUs with SPI is shown in the figure below. The system consists of two shift registers, and a Master Clock generator. The SPI Master initiates the communication cycle when pulling low the Slave Select SS pin of the desired Slave. Master and Slave prepare the data to be sent in their respective shift Registers, and the Master generates the required clock pulses on the SCK line to interchange data. Data is always shifted from Master to Slave on the Master Out – Slave In, MOSI, line, and from Slave to Master on the Master In – Slave Out, MISO, line. After each data packet, the Master will synchronize the Slave by pulling high the Slave Select, SS, line.
When configured as a Master, the SPI interface has no automatic control of the SS line. This must be handled by user software before communication can start. When this is done, writing a byte to the SPI Data Register starts the SPI clock generator, and the hardware shifts the eight bits into the Slave. After shifting one byte, the SPI clock generator stops, setting the end of Transmission Flag (SPIF). If the SPI Interrupt Enable bit (SPIE) in the SPCR Register is set, an interrupt is requested. The Master may continue to shift the next byte by writing it into SPDR, or signal the end of packet by pulling high the Slave Select, SS line. The last incoming byte will be kept in the Buffer Register for later use.
Non so, ma mi sembra di capire che, quando il ATmega328P fa da master (quindi colloquia con dei devices slave), il pin di SS va gestito dal software dell'utente ... ed io, nelle mie librerie, così ho sempre fatto ...
No, perché, se nessuno porta LOW il pin SS è ovvio che il modulo NON risponde ...
Guglielmo
Se inserissi un digitalWrite(SS, LOW) nella libreria all'interno della funzione di begin del modulo?