Forum: Mikrocontroller und Digitale Elektronik DS18S20 keine Temperaturwandlung


von Lukas G. (lukas88)


Angehängte Dateien:

Lesenswert?

Hallo users...

Ich versuche einen DS1820 mit einem Atmega48 mit 3.30V zum laufen zu 
kriegen. Leider klappt das nur so halb.

Vorneweg: Ich habe das Setup mit einem Breadboard, STK500 und einem 
Atmega8 vorher getestet, nur um zu sehen ob dich den Sensor überhaupt 
auslesen kann ,allerdings mit 5V . Klappte ohne Probleme.


Nun binde ich den Sensor in ein Projekt ein.

Das Problem des ich nun habe, ist das mann den Sensor zwar ansprechen 
kann und das Scratchpad auslesen, jedoch bei der Temperturwandlung (0x44 
+ 1 sek Wartezeit) immer nur 0xFF 0x00 ausgibt. Bei einem Power Reset 
gibt der Sensor übrigens 0xAA 0x00 zurück ,was ja korrekt ist.

Ich hab schon mehrere Beiträge gelesen, die das selbe Problem 
beschreiben. Die Lösung (ja, steht auch im Datenblatt) ist ein Strong 
Pullup, damit der Sensor genügend Strom bekommt, für die Wandlung.

Leider konnte ich damit auch keinen Erfolg verbuchen.

Vielleicht seht ihr  Fehler, die ich vor lauter Bäumen nicht mehr 
sehe...


Mein Quellcode:

1
;**************************************************************
2
;Notizen
3
;**************************************************************
4
    ;sudo avrdude -c avrispmkII -P usb -p m48  -U lfuse:w:0xDF:m -U hfuse:w:0xDF:m
5
    ;===>Divide clock by 8 internally; [CKDIV8=0]  ; Ausgeschaltet!!
6
    ; Externe Clock, Quarz 4MHz
7
8
;**************************************************************
9
;UART Berechnungen
10
;**************************************************************
11
12
    .equ F_CPU = 4000000                            ; Systemtakt in Hz
13
    .equ BAUD  = 9600                               ; Baudrate
14
15
    .equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
16
    .equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
17
    .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
18
19
    .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
20
      .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
21
    .endif
22
23
24
;**************************************************************
25
;Konstanten
26
;**************************************************************
27
28
    ; Lichtschranke
29
    .equ ls_port = PORTC
30
    .equ ls_port_io = DDRC
31
    .equ ls_diode = 2           ; PortC2
32
    .equ ls_emitter = 1         ; PortC1
33
34
    ;One Wire
35
36
    .equ one_wire_port = PORTC
37
    .equ one_wire_pin = 3
38
39
    ;WAIT
40
    ;µ sekunden
41
    .equ ys_5 = 1
42
    .equ ys_15 = 5
43
    .equ ys_60 = 16 ; genau 57µs
44
    .equ ys_120 = 48 ; genau 110µs
45
    .equ ys_460 = 200
46
    .equ ys_570 = 250
47
48
49
50
51
;**************************************************************
52
;Registerdefinitionen
53
;**************************************************************
54
55
    ; Arbeitsregister
56
    .def ar_1=      r16
57
    .def ar_2=      r17
58
    .def ar_3=      r18
59
    .def ar_4=      r19
60
61
    ; byteregister  one wire, spi....
62
63
    .def lsb=       r20
64
    .def msb=       r21
65
66
67
68
;**************************************************************
69
;SRAM -START
70
;**************************************************************
71
.dseg
72
73
74
    ;**************************************************************
75
    ;SRAM  -LED PWM Steuerung
76
    ;**************************************************************
77
        periode_pwm:                        .BYTE 2 ; 1 Byte soll, 2 byte ist
78
        periode_rgb:                        .BYTE 3 ; 1 Byte Rot, 2 Byte Grün, 3 Byte Blau => on zeit, max 250
79
80
    ;**************************************************************
81
    ;SRAM  - Timer
82
    ;**************************************************************
83
        ; Timerzäher Warteschleifen ys
84
        ys_wait_time:                       .BYTE 1 ; 1 = 5ys, 4 = 15ys, 24 = 60ys => MIKROSEKUNDENTIMER
85
        ; Timerzäher Warteschleifen ms
86
        ms_wait_counter_time:               .BYTE 2 ; counter byte1, time in ms  byte2 => MILISEKUNDENTIMER
87
        ; Timerzäher Warteschleifen s
88
        TIM1_COMPA_scounter:                .BYTE 1 ; wenn zähler 100 erreicht => 1 sec =>SEKUNDENTIMER
89
        TIM1_COMPA_scounter_ext:            .BYTE 1 ; zähler für externe schleifen, reset,  100 erreicht => 1 sec , wird nicht automatisch resetet!
90
91
    ;**************************************************************
92
    ;SRAM  - One Wire
93
    ;**************************************************************
94
95
        one_wire_data:                      .BYTE 2 ; für die übertragung/empfang von daten über one wire, byte1: msb byte2: lsb
96
97
.cseg
98
99
;**************************************************************
100
;SRAM ENDE
101
;**************************************************************
102
103
;**************************************************************
104
;Vektorentabelle
105
;**************************************************************
106
    .org 0x000
107
    rjmp init ; Reset Handler
108
    ;.org 0x001
109
    ;rjmp EXT_INT0 ; IRQ0 Handler
110
    ;.org 0x002
111
    ;rjmp EXT_INT1 ; IRQ1 Handler
112
    ;.org 0x003
113
    ;rjmp PCINT0 ; PCINT0 Handler
114
    ;.org 0x004
115
    ;rjmp PCINT1 ; PCINT1 Handler
116
    ;.org 0x005
117
    ;rjmp PCINT2 ; PCINT2 Handler
118
    ;.org 0x006
119
    ;rjmp WDT ; Watchdog Timer Handler
120
    .org 0x007
121
    rjmp TIM2_COMPA ; Timer2 Compare A Handler
122
    ;.org 0x008
123
    ;rjmp TIM2_COMPB ; Timer2 Compare B Handler
124
    ;.org 0x009
125
    ;rjmp TIM2_OVF ; Timer2 Overflow Handler
126
    ;.org 0x00A
127
    ;rjmp TIM1_CAPT ; Timer1 Capture Handler
128
    .org 0x00B
129
    rjmp TIM1_COMPA ; Timer1 Compare A Handler
130
    ;.org 0x00C
131
    ;rjmp TIM1_COMPB ; Timer1 Compare B Handler
132
    ;.org 0x00D
133
    ;rjmp TIM1_OVF ; Timer1 Overflow Handler
134
    ;.org 0x00E
135
    ;rjmp TIM0_COMPA ; Timer0 Compare A Handler
136
    ;.org 0x00F
137
    ;rjmp TIM0_COMPB ; Timer0 Compare B Handler
138
    ;.org 0x010
139
    ;rjmp TIM0_OVF ; Timer0 Overflow Handler
140
    ;.org 0x011
141
    ;rjmp SPI_STC ; SPI Transfer Complete Handler
142
    ;.org 0x012
143
    ;rjmp USART_RXC ; USART, RX Complete Handler
144
    ;.org 0x013
145
    ;rjmp USART_UDRE ; USART, UDR Empty Handler
146
    ;.org 0x014
147
    ;rjmp USART_TXC ; USART, TX Complete Handler
148
    ;.org 0x015
149
    ;rjmp ADC ; ADC Conversion Complete Handler
150
    ;.org 0x016
151
    ;rjmp EE_RDY ; EEPROM Ready Handler
152
    ;.org 0x017
153
    ;rjmp ANA_COMP ; Analog Comparator Handler
154
    ;.org 0x018
155
    ;rjmp TWI ; 2-wire Serial Interface Handler
156
    ;.org 0x019
157
    ;rjmp SPM_RDY
158
159
;**************************************************************
160
;Interrupts
161
;**************************************************************
162
163
USART_RXC:
164
165
    push        ar_1
166
    in          ar_1,SREG
167
    push        ar_1
168
169
    lds     ar_1,UDR0
170
171
    cpi     ar_1,'R'
172
    breq    rot
173
174
    cpi     ar_1,'B'
175
    breq    blau
176
    cpi     ar_1,'G'
177
    breq    gruen
178
179
180
    rot:
181
182
    ldi     ar_1,0x02
183
    out     PORTB,ar_1
184
    rjmp rx_exit
185
186
    blau:
187
188
    ldi     ar_1,0x01
189
    out     PORTB,ar_1
190
191
    rjmp rx_exit
192
193
    gruen:
194
195
    ldi     ar_1,0x04
196
    out     PORTB,ar_1
197
198
    rx_exit:
199
200
    pop     ar_1
201
    out     sreg,ar_1
202
    pop     ar_1
203
204
205
reti
206
207
ADC: ;Interrupt ende wandeln
208
209
reti
210
211
212
213
;**************************************************************
214
;Interrupts -TIMER
215
;**************************************************************
216
    TIM1_COMPA:
217
218
        push    ar_1
219
        in      ar_1,SREG
220
        push    ar_1
221
222
        ;Externer Zähler, zählt ohne Resetfunktion
223
        lds     ar_1,TIM1_COMPA_scounter_ext
224
        cpi     ar_1,255
225
        breq    TIM1_COMPA_scounter_ext_reset
226
        inc     ar_1
227
        sts     TIM1_COMPA_scounter_ext,ar_1
228
        rjmp    TIM1_COMPA_scounter_main
229
230
        TIM1_COMPA_scounter_ext_reset:
231
        ldi     ar_1,0
232
        sts     TIM1_COMPA_scounter_ext,ar_1
233
234
        TIM1_COMPA_scounter_main:
235
236
        lds     ar_1,TIM1_COMPA_scounter
237
        cpi     ar_1,99
238
        breq    TIM1_COMPA_scounter_reset
239
        inc     ar_1
240
241
        rjmp    TIM1_COMPA_exit
242
243
        TIM1_COMPA_scounter_reset:
244
245
        ldi     ar_1,0
246
247
        ;rcall ls_adc_messung
248
249
250
251
        TIM1_COMPA_exit:
252
253
        sts     TIM1_COMPA_scounter,ar_1
254
255
        pop     ar_1
256
        out     SREG,ar_1
257
        pop     ar_1
258
259
    reti
260
261
262
    TIM2_COMPA:
263
264
        push    ar_1
265
        in      ar_1,SREG
266
        push    ar_1
267
268
        lds     ar_1,ms_wait_counter_time
269
270
        cpi     ar_1,255
271
        breq    ms_wait_counter_reset
272
        inc     ar_1
273
        rjmp    TIM2_COMPA_exit
274
275
276
        ms_wait_counter_reset:
277
278
        ldi     ar_1,0
279
280
281
        TIM2_COMPA_exit:
282
283
        sts     ms_wait_counter_time,ar_1
284
        pop     ar_1
285
        out     SREG,ar_1
286
        pop     ar_1
287
288
    reti
289
290
291
    ;TIM0_COMPA: ; RGB PWM
292
293
        ;push    ar_1
294
        ;push    ar_2
295
        ;in      ar_1,SREG
296
        ;push    ar_1
297
298
        ;lds     ar_1,periode_pwm
299
        ;cpi     ar_1,200
300
        ;breq    periode_pwm_reset
301
        ;inc     ar_1
302
        ;sts     periode_pwm,ar_1
303
304
        ;pwm_red:
305
306
        ;lds     ar_2,periode_rgb
307
        ;cp      ar_2,ar_1
308
        ;breq    off_red
309
        ;rjmp    pwm_green
310
311
        ;off_red:
312
313
        ;cbi     PORTB,1
314
315
        ;pwm_green:
316
317
        ;lds     ar_2,periode_rgb+1
318
        ;cp      ar_2,ar_1
319
        ;breq    off_green
320
        ;rjmp    pwm_blue
321
322
        ;off_green:
323
324
        ;cbi     PORTB,2
325
326
        ;pwm_blue:
327
328
        ;lds     ar_2,periode_rgb+2
329
        ;cp      ar_2,ar_1
330
        ;breq    off_blue
331
        ;rjmp    TIM0_COMPA_exit
332
333
        ;off_blue:
334
335
        ;cbi     PORTB,0
336
        ;rjmp    TIM0_COMPA_exit
337
338
        ;periode_pwm_reset:
339
340
        ;clr     ar_1
341
        ;sts     periode_pwm,ar_1
342
        ;sbi     PORTB,0
343
        ;sbi     PORTB,1
344
        ;sbi     PORTB,2             ; ev ori?
345
346
        ;TIM0_COMPA_exit:
347
348
        ;pop     ar_1
349
        ;out     SREG,ar_1
350
        ;pop     ar_1
351
        ;pop     ar_2
352
353
    ;reti
354
355
;**************************************************************
356
;Unterprogramme
357
;**************************************************************
358
359
    ;**************************************************************
360
    ;Unterprogramme -USART
361
    ;**************************************************************
362
363
    serout: ; UART Senden
364
365
366
367
        lds     ar_3,UCSR0A ; get USART flags
368
        sbrs    ar_3, UDRE0
369
        rjmp    serout
370
371
        sts  UDR0,ar_1
372
373
374
    ret
375
376
377
    ls_adc_messung:
378
379
        lds     ar_1,ADCSRA
380
        sbr     ar_1,(1<<ADSC)
381
        sts     ADCSRA,ar_1
382
383
        wait_adc:
384
385
        lds     ar_1,ADCSRA
386
        sbrc     ar_1,ADSC
387
        rjmp    wait_adc
388
389
        lds     ar_1,ADCL
390
        lds     ar_2,ADCH
391
392
        cpi     ar_1,150
393
        brlo    offen
394
        brsh    geschlossen
395
396
        offen: ; Grün
397
398
        ldi     ar_1,0x04
399
        out     PORTB,ar_1
400
401
        rjmp    ls_adc_messung_exit
402
403
        geschlossen: ;Rot
404
405
406
        ldi     ar_1,0x02
407
        out     PORTB,ar_1
408
409
        ls_adc_messung_exit:
410
411
    ret
412
413
414
415
    ;**************************************************************
416
    ;Unterprogramme -WAIT
417
    ;**************************************************************
418
    wait_sec:
419
420
        push    ar_1
421
422
        ; Reset des Zählerstandes
423
        ldi     ar_1,0
424
        sts     TIM1_COMPA_scounter_ext,ar_1
425
426
        wait_s_loop:
427
428
        lds     ar_1,TIM1_COMPA_scounter_ext
429
        cpi     ar_1,99
430
        brlo    wait_s_loop
431
432
        pop     ar_1
433
    ret
434
435
436
    wait_ms:
437
438
        push    ar_1
439
        push    ar_2
440
441
442
        ldi     ar_2,0
443
        sts     ms_wait_counter_time,ar_2 ; zähler reset
444
445
        lds      ar_1,ms_wait_counter_time+1; time =  Ms warten
446
447
        wait_ms_loop:
448
449
        lds     ar_2, ms_wait_counter_time
450
        cp      ar_1,ar_2
451
        brne    wait_ms_loop
452
453
454
        pop     ar_2
455
        pop     ar_1
456
457
    ret
458
459
460
    wait_ys:
461
462
        push ar_1
463
        ;µ sekunden
464
        ;.equ ys_5 = 1
465
        ;.equ ys_15 = 5
466
        ;.equ ys_60 = 16 ; genau 57µs
467
        ;.equ ys_120 = 48 ; genau 110µs
468
        ;.equ ys_460 = 200
469
        ;.equ ys_570 = 250
470
471
        lds     ar_1,ys_wait_time
472
        wait_loop:
473
        dec     ar_1
474
        cpi     ar_1,0
475
        brne    wait_1ys_loop
476
        rjmp    wait_loop_exit
477
478
        wait_1ys_loop:
479
        nop
480
        nop
481
        nop
482
        rjmp    wait_loop
483
484
        wait_loop_exit:
485
        pop     ar_1
486
    ret
487
    ;**************************************************************
488
    ;Unterprogramme -ONE WIRE
489
    ;**************************************************************
490
491
    one_wire_reset:
492
493
        cbi     PORTC,3  ; auf LOW
494
        sbi     DDRC,3 ; auf Ausgang
495
496
        ldi     ar_1,1 ;warte 1ms
497
        sts     ms_wait_counter_time+1,ar_1
498
        rcall   wait_ms
499
500
        sbi     PORTC,3 ; auf HIGH
501
        cbi     DDRC,3 ; auf eingang
502
503
        wait_resp: ;Response puls abwarten
504
        sbic    PINC,3
505
        rjmp    wait_resp
506
507
        cbi     DDRC,3
508
        sbi     PORTC,3
509
510
        ldi     ar_1,1 ;warte 1ms
511
        sts     ms_wait_counter_time+1,ar_1
512
        rcall   wait_ms
513
514
    ret
515
516
517
518
519
    one_wire_send_cmd:      ; kommandos in lsb
520
521
        ldi     ar_1,9
522
523
        one_wire_send_cmd_loop:
524
525
            dec     ar_1
526
            tst     ar_1
527
            breq    one_wire_send_cmd_exit
528
529
            lsr     lsb
530
            brcc    one_wire_w0
531
            rjmp    one_wire_w1
532
533
            one_wire_w0: ;write 0
534
535
536
                    cbi     PORTC,3
537
                    sbi     DDRC,3
538
                    ;warte 60ys
539
                    ldi     ar_3,ys_60
540
                    sts     ys_wait_time,ar_3
541
                    rcall   wait_ys ;60ys
542
543
                    sbi     PORTC,3 ; wieder auf HIGH
544
                    cbi     DDRC,3 ;auf eingang
545
546
                    ldi     ar_3,ys_15
547
                    sts     ys_wait_time,ar_3
548
                    rcall   wait_ys ;15ys
549
550
        rjmp    one_wire_send_cmd_loop
551
552
            one_wire_w1: ;write 1
553
554
                cbi     PORTC,3  ; auf LOW
555
                sbi     DDRC,3
556
557
                ;warte 15ys
558
                  ldi     ar_3,ys_15
559
                  sts     ys_wait_time,ar_3
560
                  rcall   wait_ys ;15ys
561
562
                sbi     PORTC,3 ; auf HIGH
563
                cbi     DDRC,3
564
565
                ;warte 60ys
566
567
                 ldi     ar_3,ys_60
568
                 sts     ys_wait_time,ar_3
569
                 rcall   wait_ys ;60ys
570
571
        rjmp    one_wire_send_cmd_loop
572
573
        one_wire_send_cmd_exit:
574
575
    ret
576
577
578
    one_wire_read:
579
580
    ldi     ar_1,9
581
    ldi     lsb,0x00
582
583
    one_wire_read_loop: ;read
584
585
    dec     ar_1
586
    tst     ar_1
587
    breq    one_wire_read_exit
588
589
    cbi     PORTC,3; auf LOW
590
    sbi     DDRC,3
591
    ldi     ar_3,ys_15
592
    sts     ys_wait_time,ar_3
593
    rcall   wait_ys ;5ys
594
    sbi     PORTC,3
595
    cbi     DDRC,3
596
597
598
599
    sbis    PINC,3
600
    rjmp    read_zero
601
602
    sec
603
    ror     lsb
604
    ldi     ar_3,ys_15
605
    sts     ys_wait_time,ar_3
606
    rcall   wait_ys ;15ys
607
    rcall   wait_ys ;15ys
608
    rcall   wait_ys ;15ys
609
    rcall   wait_ys ;15ys
610
611
612
    rjmp    one_wire_read_loop
613
614
615
    read_zero:
616
617
    ror     lsb
618
    ldi     ar_3,ys_15
619
    sts     ys_wait_time,ar_3
620
    rcall   wait_ys ;15ys
621
    rcall   wait_ys ;15ys
622
    rcall   wait_ys ;15ys
623
    rcall   wait_ys ;15ys
624
625
    rjmp    one_wire_read_loop
626
627
    one_wire_read_exit:
628
629
    mov     ar_1,lsb
630
631
632
    rcall serout
633
634
635
636
637
ret
638
639
640
;**************************************************************
641
;Init
642
;**************************************************************
643
644
645
    ;**************************************************************
646
    ;Init -PORTS/STACKPOINTER
647
    ;**************************************************************
648
649
650
    init:
651
652
653
        ldi     ar_1,0b00001010
654
        out     DDRC,ar_1
655
656
        ldi     ar_1,0b00001110
657
        out     PORTC,ar_1
658
659
660
        ldi     ar_1,0xFF
661
        out     DDRB,ar_1
662
663
664
665
        ldi         ar_1,0b00000000 ;RGB LED
666
        out         PORTB,ar_1
667
668
        ldi         ar_1,LOW(RAMEND)  ;Stackpointer LOW
669
        out         SPL,ar_1
670
        ldi         ar_1,HIGH(RAMEND) ;Stackpointer HIGH
671
        out         SPH,ar_1
672
673
    ;**************************************************************
674
    ;Init - KOMPONENTEN
675
    ;**************************************************************
676
677
678
        ; Uart conf
679
         ; Baudrate einstellen
680
681
        ldi         ar_1,HIGH(UBRR_VAL)
682
        sts         UBRR0H,ar_1
683
        ldi         ar_1,LOW(UBRR_VAL)
684
        sts         UBRR0L,ar_1
685
686
        ldi         ar_1,(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0)
687
        sts         UCSR0B,ar_1
688
689
690
        ;ADC init Lichtschranke
691
692
        ldi         ar_1,0x42 ; Interne Referenz ,ADC Kanal 2
693
        sts         ADMUX,ar_1
694
695
        ldi         ar_1,0x85 ; ADC an,Interrupts ende wandeln an, prescaler 32 (125kHz), kein autotrigger
696
        sts         ADCSRA,ar_1
697
698
699
        ; TIMER0
700
        ;ldi         ar_1,(1<<WGM01) ;Timer0 mit CTC
701
        ;out         TCCR0A,ar_1
702
703
        ;ldi         ar_1,(1<<WGM02)|(1<<CS00) ;Timer0 mit Prescale 1
704
        ;out         TCCR0B,ar_1
705
706
        ;ldi         ar_1,16
707
        ;out         OCR0A,ar_1
708
709
        ;ldi         ar_1,(1<<OCIE0A)
710
        ;sts         TIMSK0,ar_1
711
712
        ; TIMER1
713
714
        ldi         ar_1, (1<<WGM12)|(1<<CS10);CTC modue an
715
        sts         TCCR1B,ar_1
716
717
        ldi         ar_1,high(40000-1) ;CTC Wert H
718
        sts         OCR1AH,ar_1
719
720
        ldi         ar_1,low(40000-1) ;  ;CTC Wert H
721
        sts         OCR1AL,ar_1
722
723
        ldi         ar_1, (1<<OCIE1A);Interrupt an CTC
724
        sts         TIMSK1,ar_1
725
726
727
        ; TIMER2
728
729
730
        ldi         ar_1,(1<<WGM21)
731
        sts         TCCR2A,ar_1
732
733
734
        ldi         ar_1,(1<<CS22)
735
        sts         TCCR2B,ar_1
736
737
738
        ldi         ar_1,62
739
        sts         OCR2A,ar_1
740
741
        ldi         ar_1,(1<<OCIE2A)
742
        sts         TIMSK2,ar_1
743
744
745
746
        ;~ ldi     ar_1,0b000000010 ;8 Prescale 600000 Overflows per sec /60 = 10000 Overflows per sec CTC
747
        ;~ out     TCCR0B,ar_1
748
749
        ;~ ldi     ar_1,(1<<OCIE0A); Interrupt bei Overflow CTC
750
        ;~ out     TIMSK0,ar_1
751
752
753
754
        ;ldi     ar_1,(1<<ISC01)|(1<<ISC00) ; INT0 und INT1 auf fallende Flanke konfigurieren
755
        ;out     MCUCR,ar_1
756
757
        ;ldi     ar_1,0b01000000 ; INT0 aktivieren
758
        ;out     GIMSK,ar_1
759
760
        ;ldi     ar_1,0b01000000 ; INT0 aktivieren
761
        ;out     GIFR,ar_1
762
763
764
765
    ;**************************************************************
766
    ;Werte Starvariablen
767
    ;**************************************************************
768
769
770
    ldi     ar_1,255  ;Nicht verändern!
771
    sts     periode_pwm,ar_1 ;
772
    ldi     ar_1,1
773
    sts     periode_rgb,ar_1 ; Rot
774
    ldi     ar_1,1
775
    sts     periode_rgb+1,ar_1 ; Grün
776
    ldi     ar_1,1
777
    sts     periode_rgb+2,ar_1 ; Blau
778
    ldi     ar_1,0
779
    sts     TIM1_COMPA_scounter_ext,ar_1
780
781
782
    ;**************************************************************
783
    ;Interrupts an/aus
784
    ;**************************************************************
785
    sei
786
787
788
main:
789
790
791
rcall   one_wire_reset
792
793
ldi     lsb,0xCC
794
rcall   one_wire_send_cmd
795
796
ldi     lsb,0x44
797
rcall   one_wire_send_cmd
798
799
sbi     DDRC,3
800
sbi     PORTC,3
801
802
ldi     ar_1,200
803
sts     ms_wait_counter_time+1,ar_1
804
805
rcall   wait_ms
806
rcall   wait_ms
807
rcall   wait_ms
808
rcall   wait_ms
809
810
811
812
rcall   one_wire_reset
813
814
ldi     lsb,0xCC
815
rcall   one_wire_send_cmd
816
817
ldi     lsb,0xBE
818
rcall   one_wire_send_cmd
819
820
821
cbi     DDRC,3
822
sbi     PORTC,3
823
824
rcall   one_wire_read
825
rcall   one_wire_read
826
827
rcall   wait_ms
828
rcall   wait_ms
829
rcall   wait_ms
830
831
832
833
rjmp   main

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lukas G. schrieb:
> Vielleicht seht ihr  Fehler, die ich vor lauter Bäumen nicht mehr
> sehe...
WEnn das auf dem Steckbrett funktioniert hat, und jetzt nicht mehr, dann 
stellt sich die Frage: was ist anders? Kannst du den STK-Aufbau nochmal 
in Betrieb nehmen?


> Mein Quellcode:
1
Antwort schreiben
2
Wichtige Regeln - erst lesen, dann posten!
3
     ...
4
    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

von Lukas G. (lukas88)


Lesenswert?

Lothar M. schrieb:
> Kannst du den STK-Aufbau nochmal
> in Betrieb nehmen?

Hab ich schon, hatte auf Anhieb funktioniert. Anders sind die 3.3V statt 
5V, und der Controller natürlich (m48 statt m8).

Lothar M. schrieb:
> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Oh, Entschuldigung. Stimmt der Quellcode ist etwas gar lang. Aber bis 
jetzt hab ich nur relativ kurze Quellcodes gepostet, und beim Lesen bin 
ich faul... Kommt nicht wieder vor.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Lukas G. schrieb:
> Anders sind die 3.3V statt 5V
Wie versorgst du den Sensor? Parasitär?
Falls ja: davon kommen weniger als 3V beim Sensor an. Und wenn der aktiv 
ist, sogar nur 2,5V.

Laut Maxim tut sich da unter 3V nichts brauchbares:
https://www.maximintegrated.com/en/support/faqs/ds18b20-faq.html

BTW: eine genaue Temperaturmessung braucht mindestens 4,3V. Darunter ist 
laut Datenblatt nur die Funktion der IO-Schnittstelle garantiert.

: Bearbeitet durch Moderator
von Zeno (Gast)


Lesenswert?

Lukas G. schrieb:
> Hab ich schon, hatte auf Anhieb funktioniert. Anders sind die 3.3V statt
> 5V, und der Controller natürlich (m48 statt m8).

Häng den Sensor an 5V und den Datenanschluß des Sensors über einen 
Pullup an +3,3V, dann klappt es auch mit der Temperatur.
Zu dem Kram mit der parasitären Speisung über die Datenleitung habe ich 
nicht wirklich Vertrauen. Gerade beim DS1820 ist das auf Grund der 
langen Wandlerzeit problematisch. Deshalb werden ja auch die Klimmzüge 
mit dem Strongpullupgeraffel gemacht, denn sonst würde der 2 
Drahtbetrieb gar nicht funktionieren. Ob das Ganze dann mit mehreren 
Sensoren zuverlässig funktioniert, wage ich mal zu bezweifeln, habe es 
aber auch nie ausprobiert. Auch für Strongpullupgeschichte ist lt. 
Datenblatt ein bestimmtes Zeitregime einzuhalten. Machst Du das? Dann 
spielen natürlich auch Leitungslängen/-querschnitte eine Rolle. Es wird 
oft verkannt das der 1-Wire-Bus ursprünglich nicht für große Distanzen 
ausgelegt war (s.hier https://www.fuchs-shop.com/de/howto/linkfamily/). 
Dort stehen auch noch weitere nützliche Informationen die Dir weiter 
helfen könnten.

Verwende den 3. Draht und verzichte auf das Strongpullupgeraffel, Du 
wirst sehr wahrscheinlich mit einem zuverlässig funktionierenden System 
belohnt.

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.