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 )
27.10.2019 11:45
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
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.
27.10.2019 11:52 :
Bearbeitet durch User
von
Lothar M.
(Firma: Titel)
(lkmiller )
(Moderator )
27.10.2019 12:46
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.
27.10.2019 12:47 :
Bearbeitet durch Moderator
von
Zeno (Gast)
27.10.2019 13:12
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.