RTC con DS1307 e Atmega8535

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

RTC con DS1307 e Atmega8535

Postby fram » 11 Jun 2013, 13:27

Salve, devo visualizzare su di un display data e ora di un RTC DS1307 tramite il protollo TWI dell'atmega8535. Mi potreste dare una mano per iniziare a fare ciò? lo devo fare in Assembly...
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC

Postby deluca » 11 Jun 2013, 14:41

@fram,
il TWI non è un protocollo, si tratta di una interfaccia hardware ... infatti sta per "Two Wire Interface" ovvero interfaccia a 2 fili.

Quando parli di protocollo forse vorrai dire I2C standard basata su "multimaster serial single-ended computer bus"?
Diciamo che sono 2 cose abbastanza differenti..... non te l'hanno spiegato? :)

Cmq siccome ho capito a cosa ti riferisci.... ;)
La comunicazione la devi implementare usando la strada hardware o implementandola via software?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: RTC

Postby fram » 11 Jun 2013, 14:57

SI intendevo dire Interfaccia (TWI) mi sono confuso.
devo realizzarlo via software e non capisco come?
sto studiando il datasheet e ho capito che devo realizzare un master-slave per trasmettere e uno per ricevere ?
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC

Postby deluca » 11 Jun 2013, 15:24

sul atmega8535 devi realizzare un master....

lo slave è il dispositivo, in questo caso l'rtc
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: RTC

Postby fram » 11 Jun 2013, 15:32

Per l'inizializzazione dell TWI come devo fare che non la capisco..
GRAZIE...
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC

Postby deluca » 11 Jun 2013, 15:34

scusa fram,
ma tu dici che la devi implementare software, poi mi dici di configurare la TWI.... wait...

c'è qualcosina che ti sfugge.

(Software) significa in emulazione
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: RTC con DS1307 e Atmega8535

Postby fram » 11 Jun 2013, 15:47

Mi scuso se non mi faccio capire, io ho un RTC DS1307 e devo prelevare data e ora in modo da stamparla su display. quindi collegando l'RTC all'Atmega8535
devo scrivere un codice che mi faccia avere i dati del RTC? per fare ciò ho che l'RTC comunica in I2C quindi devo utilizzare il TWI del micro...
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 12 Jun 2013, 01:24

Non so dove troverai il codice per TWI in assembly per l'AVR. Io l'ho usato pero' il mio codice e un po legato al resto di come faccio le cose cioe' non e' "general purpose".

Comunque esiste
Code: Select all
;**** A P P L I C A T I O N   N O T E   A V R 3 0 0 ************************
;*
;* Title      : I2C (Single) Master Implementation
che ti da un programma "bit banged" Master con tutte le funzioni necessarie senza usare l'hardware per il momento, una volta che tutto funziona potrai cambiare il codice usando l'hardware TWI, avrai un po' di pratica con le funzioni TWI/I2C.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: RTC con DS1307 e Atmega8535

Postby fram » 12 Jun 2013, 16:26

Salve, Aiutandomi con il datasheet ho scritto il Master-trasmettitore, ora lo posto, mi dite se è giusto?
L'unica cosa che non mi è chiara è quando devo fare '; Verifico TWSR' non capisco il confronto tra cosa lo devo fare, mi sapete aiutare?
.def ADRESSE_SLAVE = R11



ldi temp,104 ; SLAVE ADRESSE
mov ADRESSE_SLAVE,temp

TWI_MASTER_TRANSMITTER:

; START
ldi temp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR, temp

; Attendi, che TWINT = 1
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x08 ; Start?????????????
brne TWI_MASTER_TRANSMITTER_ERROR


; Carico SLA + "W" (W=0)
mov temp, ADRESSE_SLAVE
lsl temp ; L'ultimo bit '0' indica la 'W'
out TWDR, temp
; Attendo - TWINT sia cancellato per trasmettere
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x18 ; MT_SLA_ACK????????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico l'indirizzo del puntatore RTC
out TWDR, Indirizzo_0 ;punto all'indirizzo zero
; Attendo - TWINT sia cancellato per trasmettere
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa


; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28??????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'secondi'
out TWDR, secondi
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28?????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'minuti'
out TWDR, minuti
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28???????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'ore'
out TWDR, ore
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28??????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'day'
out TWDR, day???????
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28??????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'giorno'
out TWDR, giorno
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28????????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'mese'
out TWDR, mese
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28??????
brne TWI_MASTER_TRANSMITTER_ERROR

; Carico il dato 'anno'
out TWDR, anno
; senden - Clear TWINT
ldi temp, (1<<TWINT) | (1<<TWEN)
out TWCR, temp

; Attendo, che TWINT sia = 1, indica che il dato è stato trasmesso
rcall TWI_TWINT_attesa

; Verifico TWSR
in temp,TWSR
andi temp, 0xF8
cpi temp, 0x28 ; 0x28?????????
brne TWI_MASTER_TRANSMITTER_ERROR


; STOP
ldi temp, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR, temp

ret


;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

; ERROR
TWI_MASTER_TRANSMITTER_ERROR:
rcall TWI_ERROR

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

TWI_INI: ;Inizializzo TWI

; TWI TWBR Bit RATE Register
ldi temp, 3
out TWBR, temp
; TWI TWSR STATUS-Register
ldi temp, 0
out TWSR, temp
; TWI TWCR Control-REGISTER
ldi temp, 0<<TWINT|1<<TWEA|1<<TWEN
out TWCR,temp
ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

TWI_TWINT_attesa:
in temp, TWCR
sbrs temp, TWINT
rjmp TWI_TWINT_attesa
ret

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TWI_ERROR:
cbi PORTD,0
; TWI STOP
ldi temp, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR, temp
; TWI aus
ldi temp, (0<<TWEN)
out TWCR, temp
; TWI INITIALISIERUNG
rcall TWI_INI

rcall wait_1s
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby deluca » 12 Jun 2013, 20:44

@fram,

l'hai già assemblato?

se si, zippa e posta il progetto avr4 completo.
solo così potrò darti qualche dritta.
purtroppo non posso dedicarci molto tempo, specialmente, se lo devo correggere solo leggendo o ancor più fare copia, incolla .... crea progetto ecc ecc.
sarebbe un lavoro non giustificato e per lo più inutile... che ne dici?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: RTC con DS1307 e Atmega8535

Postby fram » 17 Jun 2013, 17:09

Salve questo è il mio progetto: una centralina che accende e spegne la caldaia quello che non riesco a visualizzare e fare funzionare l'RTC per ora e data.
non so cosa sbaglio mi potrebbe dare una mano???
c'è tutto il prog.
Attachments
progetto_centralina.rar
(4.26 KiB) Downloaded 295 times
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby fram » 18 Jun 2013, 13:34

Mi sapete dire perchè il master che ho creato non mi funziona?? è postato sopra..
grazie.......
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 18 Jun 2013, 23:02

L'ho scaricato ieri pero' ho molto da fare per il momento, scusa.

Ho una scheda con il DS1307 e' un Mega8 (no M8535) spero di trovare un po di tempo per provarlo.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: RTC con DS1307 e Atmega8535

Postby fram » 18 Jun 2013, 23:06

Grazie, aspetto novità. ......a presto....
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 19 Jun 2013, 05:49

Sfortunatamente no ho avuto molto successo con il tuo codice perche' ci sono troppi errori cercando di usare il Mega88 che mi bisogna per utilizzare il Debug Wire.

Pero' ho trovato ne mio pozzo AVR un driver in assembly che ti da le 3 routines necessarie cioe' twi_init, twi_write e twi_read. Il codice e scritto bene da un membro sul AVRFreaks e' usa macros quindi e portabile dall' originale M128 al M8535 e pure il M88 senza errori. Penso che ti sara' di aiuto.

Non avendo il tuo stesso sistema col LCD e molto difficile per me fare funzionare il tuo codice originale, se e possiblile forse potro' creare un progetto che imposta il DS1307 con un certo orario e' poi manda l'orario tramite l'usart per confermare il funzionamento ogni secondo. Pensi che potrai usarlo?

edit aggiornato il file che aveva un problemino
Attachments
I2C_TWI asm.zip
(1.63 KiB) Downloaded 315 times
Last edited by js-bascom on 30 Jun 2013, 03:51, edited 1 time in total.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: RTC con DS1307 e Atmega8535

Postby ulisse21 » 19 Jun 2013, 06:57

salve a tutti,
ho visionato un pò i vostri programmi scritti in asm, cavolo sono davvero ingarbugliati e difficili da seguire,
ma capisco che è questo il vero linguaggio che scende veramente a fondo dentro il micro.
sapreste consigliarmi un testo per poter imparare l'asm degli avr o mi devo solamente attenere a quello che c'è sui data sheet?

vi ringrazio
ulisse21
 
Posts: 49
Joined: 10 Nov 2012, 14:36

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 19 Jun 2013, 07:35

ASM e ASM per qualsiasi chip cioe' le idee di come fare le cose sono piu' o meno universali anche se gli opcodes siano differenti per differnti chips e l'assembler puo essere un po' differente.

Le assembler piu' semplici come quella che viene con Atmel Studio assemblano il programma come se fosse una singola file ache se il progetto si puo' dividere in molte file. Le assembler piu potenti di solito assemblano il programma con uscite in forma object che poi viene messo insieme dal linker per produrre la risultante hex file.

Una volta che apprendi le idee dell'assembler puoi piu' o meno usare qualsiasi assembler dopo un po di esercizio.

Un testo lo puoi trovare qui http://www.cbaird.org/
Altri esempi facili http://www.avrbeginners.net/

Come qualsiasi altro linguaggio di piu' sudi e fai esercizio piu' facile diventa...eccetto per me scrivere in Italiano, il sudore c'e' ma no diventa piu facile. :(
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: RTC con DS1307 e Atmega8535

Postby deluca » 19 Jun 2013, 10:10

Salve a tutti
ci sarebbe questo manuale in inglese app fatto per beginners:

http://mathcs.slu.edu/~fritts/csci305/AVR/beginner_en.pdf

e questa raccolta di tools niente male per chi vuole iniziare con avr assembly
http://www.avr-asm-tutorial.net/avr_en/index.html

Buon divertimento
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: RTC con DS1307 e Atmega8535

Postby fram » 22 Jun 2013, 14:51

Salve, non sono riuscito a far partire il mio RTC non so dove sbaglio ....mi sapete dare indicazioni su come fare prendendo spunto dal mio codice perchè non so piu cosa fare. oppure se avete qualche esempio da inviarmi... grazie...
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby Leonardo » 22 Jun 2013, 15:48

Salve fram, è certo che il modulo RTC è funzionante? Se ha a disposizione un Arduino o un altro sistema con qualche esempio già testato disponibile magari potrebbe verificarne il funzionamento
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Next

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 3 guests

cron