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