Forum: Mikrocontroller und Digitale Elektronik Wieder mal DS1820 - ATMEGA88 + Display = Empfange Daten aber keine Temperatur


von sebastian xxlxx (Gast)


Lesenswert?

Hallo

ich habe einen DS1820 (9Bit Type) am Mega88 laufen.
Den code habe ich übernommen und abgeändert für eine Displayanzeige.

ich bekomme im Display 0 & 1 angezeigt die immer gleich sind.
also kein unterschied wenn sich die temperatur ändert.
ich lese nicht die ROM adresse aus. diese kann es also nicht sein.
aber was sehe ich da ???

der Code bleit immer gleich außer ich ziehe den datenpin ab.
Der Code kommt vom Ds1820 denke ich mal.

wenn ich beim Senden das byte "BE" weglasse bekomme ich 16x1

sonnst steht im Display immer

Byte 1 10100011
byte 2 01110010
byte 3 11011110
byte 4 10000000

am Display liegts nicht :-)

Ds1820 hängt an 5V + GND + Portpin + Pullup 4,7K nach 5V

technisch passt das. aber ich sehe nix :(

habe jetzt schon viel gelesen im Forum ... passt aber alles nicht zu mir

hier mal der Code (1 Seite das ist alles )
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <string.h>
4
#include <stdlib.h>
5
6
#define WDDR   DDRD
7
#define WPORT  PORTD
8
#define WPIN   7
9
10
11
void wire_high (void) {
12
            WDDR &= ~(1<<WPIN);          
13
}
14
15
void wire_low (void) {
16
            WDDR |= (1<<WPIN);
17
            WPORT &= ~(1<<WPIN);
18
}
19
20
int wire_reset (void) {
21
22
            wire_low();
23
            _delay_us(500);
24
            wire_high();
25
26
            _delay_us(100);
27
28
            if (PIND & (1<<WPIN)) {
29
            return 0;
30
            } else {
31
            _delay_us(400);
32
            return 1;
33
            }
34
35
}
36
37
void senden (unsigned int wert) {
38
                int i = 0;
39
                int code = 0;
40
                for (i=0; i<8; i++) {
41
                code = ((wert >> i) & 1);  //geht so!!!
42
                if (code == 1) {
43
                wire_low();
44
                _delay_us(60); //0 senden (60-120 us) 90
45
                wire_high();
46
                } else {
47
                wire_low();
48
                _delay_us(10); //1 senden (1-15 us) 7
49
                wire_high();
50
                  }
51
                _delay_us(20);
52
                 }
53
54
                }
55
56
int empfang (void) {
57
          int i = 0;
58
          unsigned int zahl1 = 0;
59
          for (i=0; i<8; i++) {
60
61
                      wire_low();
62
                      _delay_us(1),  //1
63
                      wire_high();
64
                      _delay_us(4);  //4
65
66
                      if (PIND & (1<<WPIN))
67
                      {
68
                      zahl1 = zahl1 + 1;
69
                      lcd_string("1");
70
                      }                                        
71
                      else
72
                      lcd_string("0");
73
74
                      zahl1 = zahl1 * 2; //2 für binär 
75
76
                      while (!(PIND & (1<<WPIN))) {
77
                      _delay_us(2);
78
          }
79
80
81
//_delay_us(80);
82
 }
83
84
 return zahl1;
85
}
86
87
int main (void) {
88
89
lcd_init();
90
91
while(1)
92
{
93
  
94
int ergebnis = wire_reset();
95
  if (ergebnis == 1) 
96
        {
97
        senden (0xCC);   //CC
98
      _delay_us(10);   //10
99
100
      senden (0x44);   //44
101
      _delay_us(100);  //100
102
103
      wire_reset();
104
105
          senden (0xCC);   //CC
106
107
108
      _delay_us(10);   //10
109
      senden (0xBE);   //BE
110
                   
111
      _delay_ms(1000);  //1000
112
            
113
      set_cursor(0,1);
114
      unsigned int wert1 = empfang();
115
116
            lcd_string("--");
117
118
      _delay_us(60);
119
      unsigned int wert2 = empfang();
120
     
121
122
          set_cursor(0,2);
123
      unsigned int wert3 = empfang();
124
125
            lcd_string("--");
126
127
      _delay_us(60);
128
      unsigned int wert4 = empfang();
129
      
130
      } 
131
        else {
132
133
          set_cursor(0,1);
134
          lcd_string("geht nicht");
135
136
        }
137
} 
138
139
return (0);
140
141
}

: Gesperrt durch User
von Tomi X. (avr-ghost)


Lesenswert?

heyy muss genau das gleiche machen wie du....verwendest du einen Text 
oder Grafik Display und weißt du wie der code für einen atmega16 
aussieht ? danke

von Karl H. (kbuchegg)


Lesenswert?

Bitte grab keine Uralt Threads aus!

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.