Forum: Mikrocontroller und Digitale Elektronik DS1302 - Sekunden / Minuten von 0 - 90!


von Daniel_HH (Gast)


Angehängte Dateien:

Lesenswert?

Was ist den hier kurioses passiert? Ich hab es endlich geschafft den rtc 
auszulesen, jeodoch: gibt dieser die Zahlen von 0-90 aus, springt von 9 
auf 16, 25 auf 32, 57 auf 64 usw... habt Ihr`ne Idee woran das liegen 
könnte?

vielen Dank füür eure Hilfe!

von Daniel_HH (Gast)


Angehängte Dateien:

Lesenswert?

huii, sorry! Hier der Code.

von avr (Gast)


Lesenswert?

Wahrscheinlich gibt er die Zeit BCD-codiert aus.

von Daniel_HH (Gast)


Lesenswert?

1
.include "m32def.inc"
2
3
.equ XTAL      = 3686400
4
.equ LCD_PORT  = PORTD
5
.equ LCD_Com  = PortB
6
.equ PIN_RS    = PB0
7
.equ PIN_RW      = PB1
8
.equ PIN_E     = PB2
9
.equ RTCs    = PC5
10
.equ RTCi    = PC3
11
.equ RTCr    = PC1
12
.def temp1    = r16
13
.def temp2    = r17
14
.def temp3    = r18
15
.def dat0    = r19
16
.def adr0    = r20
17
18
19
.org 0x0000
20
  rjmp main
21
.org OVF0addr
22
  rjmp Overflow0
23
24
main:
25
  ldi r16, LOW(RAMEND)
26
  out SPL, r16
27
  ldi r16, HIGH(RAMEND)
28
  out SPH, r16
29
  
30
  ldi r16, (1<<CS02)
31
  out TCCR0, r16
32
  ldi r16, (1<<TOIE0)
33
  out TIMSK, r16
34
  sei
35
36
  ldi r16, 255
37
  out DDRB, r16
38
  
39
  out DDRD, r16
40
41
  rcall lcd_init
42
  rcall rtc_init
43
  
44
  
45
  ldi r19, 0b10000000
46
  rcall lcd_command
47
  ldi r19, 0
48
  rcall lcd_data
49
50
51
loop:
52
53
  ldi adr0, 0b10000001
54
  rcall RtcReadCommand
55
  rcall akt_uhr
56
  rjmp loop
57
58
akt_uhr:
59
  mov temp2, dat0
60
  ldi temp3, '0'-1
61
check_s10:
62
  inc temp3
63
  subi temp2, 10
64
  brcc check_s10
65
  subi temp2, -10
66
  ldi r19, 0b10001011
67
  rcall lcd_command
68
  mov r19, temp3
69
  rcall lcd_data
70
std_01:
71
  ldi temp3, '0'
72
check_s01:
73
  add temp3, temp2
74
  mov r19, temp3
75
  rcall lcd_data
76
  ret
77
78
lcd_init:
79
   cbi PortB, 1
80
    ldi   temp3,6
81
powerupwait:
82
    rcall delay5ms
83
    dec   temp3
84
    brne  powerupwait
85
    ldi   temp1, 0b00110000
86
    out   PortD, temp1 
87
    rcall lcd_enable
88
    rcall delay5ms
89
    rcall lcd_enable
90
    rcall delay5ms
91
    rcall lcd_enable
92
    rcall delay5ms
93
    ldi   temp1, 0b00111000    
94
    out   PortD, temp1
95
  rcall lcd_enable
96
  rcall delay50us
97
    ldi   temp1, 0b00001100   
98
    out   PortD, temp1
99
  rcall lcd_enable
100
  rcall delay50us
101
  ldi r19, 0b00000001
102
  rcall lcd_command
103
  rcall delay5ms
104
Charakter:
105
  ldi r19, 0b01000000
106
  rcall lcd_command
107
  
108
  ldi ZL, LOW(CG00*2)
109
  ldi ZH, HIGH(CG00*2)
110
  ldi temp3, 8
111
cg00loop:
112
  lpm r19, z+
113
  rcall lcd_data
114
  dec temp3
115
  brne cg00loop
116
  ldi r19, 0b10000000
117
  rcall lcd_command
118
  ret
119
120
lcd_data:
121
  sbi PortB, 0
122
  out LCD_PORT, r19
123
  rcall lcd_enable
124
  cbi PortB, 0
125
  ret               
126
127
lcd_command:
128
  cbi PortB, 0
129
  out LCD_Port, r19
130
  rcall lcd_enable
131
  sbi PortB, 0
132
  ret
133
134
135
lcd_enable:
136
  sbi PortB,2
137
  rcall delay50us
138
  cbi PortB, 2
139
  ret 
140
141
delay50us:             
142
  ldi  temp1, ( XTAL * 50 / 3 ) / 1000000
143
delay50us_:
144
  dec  temp1
145
    brne delay50us_
146
  ret                         
147
 
148
delay5ms:                               
149
  ldi  temp1, ( XTAL * 5 / 607 ) / 1000
150
WGLOOP0:   
151
  ldi  temp2, $C9
152
WGLOOP1:   
153
  dec  temp2
154
    brne WGLOOP1
155
    dec  temp1
156
    brne WGLOOP0
157
    ret        
158
159
rtc_init:
160
  ldi temp2, 255
161
  out DDRC, temp1
162
  clr temp2
163
  out PORTC, temp1
164
  ldi adr0, 0x8E
165
  clr dat0
166
  rcall RtcWriteCommand
167
  ldi adr0, 0x90
168
  ldi dat0, 0xA0
169
  rcall RtcWriteCommand
170
171
  ldi adr0, 0x80
172
  ldi dat0, 45
173
  rcall RtcWriteCommand
174
175
  ldi adr0, 0x8E
176
  ldi dat0, 0x80
177
  rcall RtcWriteCommand
178
  ret
179
180
RtcWriteCommand:
181
  sbi DDRC, 3
182
  sbi PortC, 1
183
  push dat0
184
  mov dat0, adr0
185
  rcall CeClkSetupTime
186
  rcall RtcWriteByte
187
  pop dat0
188
  rcall RtcWriteByte
189
  cbi PortC, 1
190
  ret
191
  
192
RtcWriteByte:
193
  ldi temp1, 8
194
RtcWriteByte2:
195
  rcall ClkDataDelayTime
196
  lsr dat0
197
  brcs RtcWriteByte3
198
  cbi PortC, 3
199
  rjmp RtcWriteByte4
200
RtcWriteByte3:
201
  sbi PortC, 3
202
RtcWriteByte4:
203
  nop
204
  sbi PortC, 5
205
  rcall ClkLoHiTime
206
  cbi PortC, 5
207
  rcall ClkLoHiTime
208
  dec temp1
209
  brne RtcWriteByte2
210
  ret
211
212
RtcReadCommand:
213
  cbi DDRC, 3
214
  cbi PortC, 3
215
  sbi PortC, 1
216
  rcall CeClkSetupTime
217
  mov dat0, adr0
218
  rcall RtcWriteByte
219
  ldi temp1, 8
220
RtcReadCmd1:
221
  clc
222
  sbic PinC, 3
223
  sec
224
  sbi PortC, 5
225
  ror dat0
226
  rcall ClkLoHiTime
227
  cbi PortC, 5
228
  rcall ClkLoHiTime
229
  dec temp1
230
  brne RtcReadCmd1
231
  cbi PortC, 1
232
  ret
233
234
235
ClkLoHiTime:
236
ClkDataDelayTime:
237
  ldi temp2, 1
238
ClkLoHiTime1:
239
  nop
240
  dec temp2
241
  brne ClkLoHiTime1
242
  ret 
243
244
CeClkSetupTime:
245
  ldi temp2,5
246
  nop
247
CeCLKSetupTime1:
248
  dec temp2
249
  brne CEClkSetupTime1
250
  ret
251
252
Overflow0:
253
254
  reti
255
256
CG00:
257
  .db 0x00, 0x04, 0x0A, 0x0A, 0x0A, 0x1F, 0x04, 0x00

von Daniel_HH (Gast)


Lesenswert?

Na Super! Vielen Dank :( Da hock ich hier die halbe Nacht und grübel was 
da falsch gelaufen sein könnte und du zauberst mir innherhalb von 
Sekunden die Antwort schäm

von ... (Gast)


Lesenswert?

Daniel_HH schrieb:
> .include "m32def.inc"
> .equ XTAL      = 3686400
> ...
Geht soetwas nicht als Anhang???

von Daniel_HH (Gast)


Lesenswert?

..geht sicherlich auch als Anhang, war ich grad aber zu doof für -ich 
bite um eine harte und gerechte Bestrafung!

von Odin hilft (Gast)


Lesenswert?

selbsternannte Wächter gibts überall

von Daniel_HH (Gast)


Angehängte Dateien:

Lesenswert?

Leute ich hoffe, Ihr habt spontan `ne Idee:

ich verwende die freien Register des DS1302 um andere Daten zu sichern 
und zu lesen, diese werden ständig aktualisiert.
Wenn jedoch Daten geschrieben werden, kann es passieren, dass andere 
Register urplötzlich Ihre Daten verlieren -beim auslesen bekomme ich nur 
noch sinnloses raus... Ich habe das write Protection Bit natürlich nicht 
gesetzt da ich mit gesetzten WPB keine Daten übertragen kann...

Habt Ihr`ne Idee woran`s liegen kann?

von Peter D. (peda)


Lesenswert?

Du hast ausversehen das *.hex gepostet. Poste mal das *.c bzw. *.asm.

Peter

von Daniel_HH (Gast)


Angehängte Dateien:

Lesenswert?

Hoppla :/

von Daniel_HH (Gast)


Lesenswert?

...jetzt hab ich mal ein wenig rum probiert: Der Fehler tritt nicht auf 
wenn ich den Timer deaktiviere. Ich kann es mir zwar nicht plausibel 
erklären aber ich denke, dass das Carry-Flag aus dem cpi Vergleich wohl 
irgendwie einfluss auf das Hauptprogramm nehmen muß...

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Kleiner Tip

Du machst dir viel zu viel Arbeit. Häng deinen Source Code ganz einfach 
einfach nur an. Die Forensoftware weiß schon, was sie damit machen muss 
und welcher Syntax Highlighter dafür vernünftig ist.

von Karl H. (kbuchegg)


Lesenswert?

Daniel_HH schrieb:
> ...jetzt hab ich mal ein wenig rum probiert: Der Fehler tritt nicht auf
> wenn ich den Timer deaktiviere. Ich kann es mir zwar nicht plausibel
> erklären aber ich denke, dass das Carry-Flag aus dem cpi Vergleich wohl
> irgendwie einfluss auf das Hauptprogramm nehmen muß...


Na ja. Wenn du in einer ISR nicht automatisch und im Schlaf sofort erst 
mal das SREG sicherst und als letztes in der ISR wiederherstellst, 
sollte man dir sowieso mit dem nassen Fetzen eine überbraten
1
Overflow0:
2
  cpi MenuDelay, 0
3
  breq Overflow0_Out
4
  dec MenuDelay
5
6
Overflow0_Out:
7
  reti

Fehler. Schwerer Fehler!

von Daniel_HH (Gast)


Lesenswert?

"SREF Sichern" hört sich interessant an :) Für den Spruch: Mit nassen 
Fetzten einen überbraten, bekommst du direkt`nen Oskar von mir :)) 
Genial -den werd ich mir merken lach

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.