RTC con DS1307 e Atmega8535

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Re: RTC con DS1307 e Atmega8535

Postby fram » 23 Jun 2013, 09:04

Ciao leonardod, io devo realizzare il master trasmetti e master riceci per un rtcDs1307 per interfacciarlo con atimega8535 in assembly. Lho gia realizzato ma non funziona.l rtc è stato ritirato da poco.hai qualche esempio da fornirmi ? Grazie
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby legacy » 23 Jun 2013, 14:08

eh, beati voi, io mi ero scocciato persino del C e ho finito per rivederne la grammatica stringendola attorno alle regole Misra per definire una cosa che chiamo "safe-C", praticamente un subset molto stretto dell'ANSI C in cui valgono tutte le regole Mistra e anche altre desunte dalla DO178B. Chiaramente lungi da me l'idea di mettere mano a gcc o qualsiasi altro compilatore per rivederne la semantica: ho scritto un analizzatore di codice che, come una maestrina, bacchetta ogni violazione di regola con voto finale "codice safeC compliant: accettato/rigettato", proprio/bocciato, non esiste il rimandato a settembre se non nella misura in cui vengono indicate le linee di codice e le violazioni alle regole, quindi se non passa l'interrogazione della Maestrina nemmeno compila. L'assembler a confronto permetterebbe di fare quei pastrocchi incontrollabili, ancora meno portabili ne gestibili quando si ha a che fare con livelli di complexity abbastanza spessa.

-> tradotto va bene per la cucina didattica, casereccia hobbistica, e con riserva, perche' tra l'altro, anche fra gli hobbisti e didattici, il C sta gia' stretto a chiunque conosca, preferisca, o abbia l'obblico di passare da modula3, Pascal, o Ada :lol:
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 24 Jun 2013, 06:32

Se il DS1307 non parte la ragione e' di solito perche' il bit 7 (CH) del registro zero e' 1 e deve essere inizializzato a zero.
Bit 7 of Register 0 is the clock halt (CH) bit. When this bit is set to 1, the
oscillator is disabled. When cleared to 0, the oscillator is enabled.

Ora alcuni commenti sul tuo codice e il progetto in generale, spero che non ti offendi perche' i commenti sono per il tuo bene futuro. :-)

Prima di tutto se queste e' una vera caldaia che potrebbe scoppiare se l'electronica fallisce quali sistemi di sicurezza esistono?
Per esempio valvole di scarico vapore, interruttori termici etc.

Il codice e' quasi impossibile da seguire, non perche' e scritto in assembly ma perche' e una bella spaghettata senza molta logica.

Il progetto dovrebbe almeno contenere 5 file con i seguenti codici:

Modulo main, impostazione del sistema, controllare la tastiera e decidere se si deve fare aggiornamenti, controllare l'orario e decidere se accender o spegnere la caldaia.

Modulo tastiera che gestisca le funzioni tastiera come per esempio covertire i tasti a numeri e scannerizzare gli interrutori etc.

Modulo TWI/I2C che gestisca le funzioni TWI/I2C come per esempio quella che postai sopra. Questa non dove contenere nessun codice RTC or altro periferico TWI/I2C, soltanto inpostare, scriver e leggere la TWI/I2C.

Modulo DS1307 che tramite l'uso del modulo TWI/I2C gestisca le funzioni dell'orologio.

Modulo LCD che gestisca le funzioni del' LCD come impostazione, scrivere un dato singolo o una stringa, cancellare il screen, mettere il cursore ad una posizione per esempio linea 1 carattere 6 etc.

Poi, devi per forza usare l'antiquato M8535 che no ha nessuno modo di essere debuggato? Potresti usare per esmpio un M164p che contiene JTAG debug ed e comaptibile con il M8535? Come dissi prima ho cercato di fare funzionare il tuo codice ma c'e' troppo lavora da fare per convertirlo per il M88 che posso usare sul mio board.
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 » 24 Jun 2013, 10:05

Salve, non si preoccupi ma lo so gia che il codice è scritto in modo ingarbugliato.cmq la centralina non deve gestire la caldaia ma solo l'accensione e lo spegnimento di essa confrontando la temperatura che c'è in una casa e l'orario che è impostato per l'eventuale accensione.
Uso M8535 perchè è una specifica di progetto come lo è assembly.
per quanto riguarda il progetto senza RTC funziona perfettamente, inserendo l'rtc si blocca e non capisco perchè.
ritornando all'RTC il bit 7 del registro zero(secondi) è sempre zero non l'ho mai cambiato.
per quanto riguarda il TWI per avere una frequenza di 100KHz per l'rtc mi devo attenere alla formula che c'è nel datasheet. avendo una fraquenza di 4MHZ come devo impostare TWBR e TWPR, per avere 100KHz?
Grzie per l'aiuto...
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby fram » 24 Jun 2013, 10:11

Le mando il nuovo codice che ho scritto, è solo il master-trasmetti e il master ricevi. mi sa dire se è corretto???
grazie.
Attachments
master-tx-rx.rar
(1.27 KiB) Downloaded 269 times
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 25 Jun 2013, 10:27

Impostazione per bassa frequenza (100KHz) o alta frequenza (400KHz). Usa TWI_Master_Init_low per 100KHz

Di solito io riservo r24 per temp e r25 per temp1. Puoi usare qualsiasi registro per temp1 da R16 a R31, pero' ti consiglio di cambiare il tuo codice per riservare i due registri per uso temporaneo.

Ho scaricato il nuovo codice, non so quando avro' tempo per provarlo pero'.

Code: Select all
#define fosc 4000000            ; 4MHz

;Put TWI equate lines in main code and adjust as needed
;
;TWI equates
;
#define TWI_scl_bitrate_l 100000            ;Desired TWI low speed bit rate
#define TWI_scl_bitrate_h 400000            ;Desired TWI high speed bit rate
#define TWI_TWPS 0x00                     ;TWI prescaler
#define TWI_TWBR_L (fosc/TWI_scl_bitrate_l-16)/2 ;Works out TWBR low speed value
#define TWI_TWBR_H (fosc/TWI_scl_bitrate_h-16)/2 ;Works out TWBR high speed value


;Initialise TWI in low speed mode
TWI_Master_Init_low:
   ldi      temp1,TWI_TWBR_L            ;Set bit rate register for low speed
   rjmp   TWI_Init
;Initialise TWI in high speed mode
TWI_Master_Init_high:
   ldi      temp1,TWI_TWBR_H            ;Set bit rate register for high speed
;Initialize TWI as master
TWI_Init:
   sts      TWBR,temp1
   ldi      temp1,TWI_TWPS               ;Set prescaler register
   sts      TWSR,temp1
   ldi      temp1,(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)   ; Enable TWI
   sts      TWCR,temp1
   ret


edit e naturalmente devi dire al codice pure il valore fosc.
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 » 26 Jun 2013, 09:34

Grazie per i chiarimenti.
Se ha tempo spero che guardi il file che le ho mandato dicendomi se è esatto o no..
Grazie
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 26 Jun 2013, 22:40

Ho messo insieme un piccolo progetto che legge l'orologio e lo stampa su un terminal tramite l'USART. (con il Mega88)

Ho pero' usato il file I2C.ASM come driver e ho scoperto un piccolo errore, ancora no so dove esattamente, che blocca il TWI quando si scrive all'orologio per metter a zero il CH bit, una volta che rimuovo la linea che scrive il pacchetto tutto funziona bene dal momento che il CH bit e' a zero e l'orologio parte.

Oggi non avro' molto tempo per sfortuna per continuare, una volta che tutto funziona cerhero' di usare il tuo codice.
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 » 26 Jun 2013, 22:49

Ok, grazie per i chiarimenti.se trova l errore mi piacerebbe sapera qual'è. Grazie...
fram
 
Posts: 34
Joined: 09 May 2013, 14:29

Re: RTC con DS1307 e Atmega8535

Postby js-bascom » 30 Jun 2013, 04:01

Dopo aver sudato 14 camicie.....

Il file che avevo postato prima e' stato aggiornato perche' non aspettava che il TWSTO bit fosse zero prima di finire con il TX o RX e quindi a volte si bloccava.

Il seguente progetto funziona con il M8535 e aggiorna l'orario ogni secondo sull'UART, devi solo riassemblarlo per 4 MHz perche' io ho un cristallo di 8MHz.

Dovrebbe fornirti abbastanza informazioni per continuare. :-)
Attachments
DS1307 Mega8535.zip
(18.5 KiB) Downloaded 240 times
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)

Previous

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 1 guest