1WIRE

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

1WIRE

Postby Henk » 17 Sep 2014, 17:34

Ciao a tutti.

In qualche occasione ho gestito senza problemi componenti 1-WIRE in assembler e stavolta ho necessità di farlo con il BASCOM-8051, visto che esistono 3 comodissime funzioni preconfezionate. Il punto però è che microprocessore e DS2401 non si agganciano poichè non vengono rispettate le tempistiche d'onda imposte (verificato con analizzatore stati logici).

Scrivendo il seguente codice:

Config 1wire = P3.5
1wreset
1wwrite &H33
For Nc = 1 To 8
Sn(nc) = 1wread()
Next


il DS2101 non risponde perchè i comandi digitali inviati dal micro sono "troppo veloci" rispetto a ciò che si aspetta. Se invece costruisco i ritardi manualmente con cicli di for in basic allora tutto funziona ...ma mi sembra assurdo sbrodolare in 100 righe di codice ciò che il manuale dice che si può fare con i 3 comandi scritti sopra!

Qualcuno ha avuto esperienze più fortunate con questo comando?
Il Xtal del microprocessore è 22.1184MHz

Grazie
Saluti a tutti
Tiziano
Henk
 
Posts: 12
Joined: 21 Apr 2013, 10:51

Re: 1WIRE

Postby pier » 18 Sep 2014, 17:22

Frequenza bella altina.
Che micro usi? Di quanto le tempistiche sono sballate (quali ritardi devi inserire a manina)?
Sei certo di aver impostato esattamente la frequenza del quarzo (direttiva $crystal)?
Hai cavi molto lunghi?
Hai provato ad abbassare la resistenza da 4,7K (min consigliato 1,5k)?
pier
 
Posts: 115
Joined: 11 Aug 2013, 22:05

Re: 1WIRE

Postby Henk » 22 Sep 2014, 22:00

Ciao Pier,
grazie dell'intervento;queste le risposte:
1) Il micro è un AT89C51RD2-RLTUM e la frequenza di 22.1184MHz non dovrebbe essere un problema (in altre applicazioni l'ho usato fino a 60MHz)
2) Le tempistiche sono "fuori" in quanto il micro è troppo veloce: un dato per tutti, il TSLOT è 36us quando è ammesso 60-120us (mi riferisco alla Fig.6 del datasheet del DS2401). Di conseguenza non si capiscono.
3) I ritardi che inserisco manualmente sono quelli necessari per rispettare le specifiche del DS2401, misurati sperimentalmente.
4) La direttiva $crystal = 22118400 è corretta
5) Il componente non ha cavi ma è sul PCB a 4-5mm dal micro con una R-pullup di 3K3, ma questi due elementi non influiscono certo sui tempi.
Grazie
Henk
 
Posts: 12
Joined: 21 Apr 2013, 10:51

Re: 1WIRE

Postby pier » 23 Sep 2014, 16:30

Bah, mi sembra strano che la routine che sovrintende alla comunicazione 1wire fallisca perchè "il micro è troppo veloce". Le temporizzazioni dovrebbero tenere conto del clock e non affidarsi alla velocità del micro anche se tutto può essere...
Comunque, tanto per provare, puoi vedere se con un clock ad es. 8MHz oppure usando il prescaler le temporizzazioni cambiano?
Se fosse così potresti forse risolvere scrivendo nel registro CKRL (datasheet del micro) il valore opportuno prima e dopo di leggere/scrivere sulla periferica 1wire senza farti venire il mal di testa..

Nota finale: effettivamente i cavi lunghi e la R di pullup non influisce sui tempi in genere ma su quelli dei fronti sì e questo potrebbe essere un problema aggiuntivo ma solo se avessi le temporizzazioni in range accettabili (non nel tuo caso in cui distanze e valore R non sospette e temporizzazioni fuori tolleranza).
Last edited by pier on 23 Sep 2014, 16:44, edited 1 time in total.
pier
 
Posts: 115
Joined: 11 Aug 2013, 22:05

Re: 1WIRE

Postby Henk » 23 Sep 2014, 16:42

Ciao Pier,
scrivendo che il "micro è troppo veloce" intendo dire che effettua le tempistiche del 1wire in modo più veloce del dovuto. Ho poi escluso cavi, pullup e quant'altro poichè il dialogo funziona bene se realizzo i ritardi in basic rispettando le specifiche ...solo che sono decine e decine di righe e mi sembra assurdo seguire quella strada se esiste la funzione preposta!
Sembra strano anche a me ...ma così è!
Henk
 
Posts: 12
Joined: 21 Apr 2013, 10:51

Re: 1WIRE

Postby pier » 23 Sep 2014, 16:46

Non avevo visto la risposta prima della mia modifica al post ma vedi se ti può servire quanto detto a proposito del prescaler
pier
 
Posts: 115
Joined: 11 Aug 2013, 22:05

Re: 1WIRE

Postby Henk » 02 Dec 2014, 23:15

Mi scuso con Pier per non avergli risposto prima. Il tuo suggerimento è stato decisamente proficuo poichè i tempi sono rallentati della metà, come prescritto dal datasheet del micro.
E' bastato effettivamente intervenire sul registro CKRL per ottenere il codice funzionante:
Config 1wire = P3.5 'data pin with 3K3 pullup
Dim Ar(8) As Byte , A As Byte , Qq As Byte
Ckrl = 254 'prescaler register: 254=half speed
1wreset 'reset the device
1wwrite &H33 'read ROM command
For Qq = 1 To 8
Ar(qq) = 1wread() 'place into array
Next
Ckrl = 255 'prescaler register: 255=normal speed
Grazie ancora per avermi messo sulla strada giusta.
Henk
 
Posts: 12
Joined: 21 Apr 2013, 10:51

Re: 1WIRE

Postby pier » 03 Dec 2014, 10:54

Felice di esserti stato utile!
Ogni problema risolto è un po' un nostro problema risolto :)

Pier
pier
 
Posts: 115
Joined: 11 Aug 2013, 22:05


Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 5 guests