DS18S20 - STK200 mit 8515 Controller

OP #1252148
Lesenswert?

Hallo, habe einen DS18S20 Sensor und möchte ihn mit dem Atmel STK 200 
mit einem 8515 Controller über die RS232 ausgeben.

Mein Problem ist, dass am Bildschirm immer 0 Devices detected ausgegeben 
wird. Was darauf zurückzuführen hat, dass kein DS1820 am Bus gefunden 
wurde.

Findet ihr vl einen Fehler im Code oder habe ich den DS1820 falsch 
angeschlossen?

V++... 5V
GND... Masse
DQ.... PortB/0
Zwischen V++ und DQ ist ein Widerstand 4,7k.

Getaktet ist der Controller mit 8MHz.


Bitte um dringenden Rat, weiß einfach nicht mehr weiter!

CODE:

Chip type : ATmega8515
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega8515.h>
#include <delay.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

// 1 Wire Bus functions
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds1820.h>
#define MAX_DEVICES 8

unsigned char rom_code[MAX_DEVICES][9];

// Declare your global variables here

void main(void)
{

unsigned char i,j,devices;
int temp;
w1_init();
UCSRA=0x00; //baud rate...übertragung RS2/32
UCSRB=0x08;

UBRRL=0x33;




devices=w1_search(0xf0,rom_code);
printf("%-u DEVICE(S) DETECTED\n\r",devices);

// 1 Wire Bus initialization
w1_init();

while (1)
{
for(i=0;i<devices;)
{
temp=ds1820_temperature_10(&rom_code[i][0]);

j='+';
if(temp<0)
{
j='-';
temp=-temp;
}
printf("t%-u=%c%-i.%-u\xf8C\n\r",++i,j,temp/10,abs(temp%10));
}

};
}



mfg
Gast #1253123
Lesenswert?

1
devices=w1_search(0xf0,rom_code);
2
printf("%-u DEVICE(S) DETECTED\n\r",devices);
3

4
// 1 Wire Bus initialization
5
w1_init();


Also wenn man das w1_init() VOR dem
w1_search() macht, könnte das helfen.
#1253149
Lesenswert?

Raus muss der 2-te Aufruf zwar, aber er hat natürlich nichts damit zu 
tun, dass die search Funktion nichts findet.


Das ist die Krux mit vorgefertigten Libraries: Super einfach in der 
Anwendung, aber wenns was hat, steht man da wie der Ochs vorm Tor.

(Kann man mit dem Debugger in die Funktionen hineinsteppen?)

Rein testweise würde ich mir trotzdem an deiner Stelle den WinAvr auf 
die Maschine holen, die PeDa Routinen aus der Codesammlung mal 
draufspielen. Wenn die auch nicht funktionieren, dann wirds wohl ein 
Hardwareproblem sein.
Gast #1253215
Lesenswert?

Es fehlen mindestens die Definitionen der Funktionen w1_init(),
w1_search() und  ds1820_temperature_10().

Die sind ja im Code angegeben Stefan!?

devices=w1_search(0xf0,rom_code);
.
.
.
temp=ds1820_temperature_10(&rom_code[i][0]);
Persönliche Seite #1253241
Lesenswert?

Peter K. schrieb:

> Die sind ja im Code angegeben Stefan!?
>
> w1_init();
> devices=w1_search(0xf0,rom_code);
> ...

Der Aufruf der Funktionen ist angegeben, aber nicht, was die Funktionen 
machen (die Definition).

Man kann mit dem derzeitigen Code den Funktionen nicht "auf die Finger 
schauen". Z.B. nachsehen, was der Parameter 0xf0 beim w1_search() macht.
#1253252
Lesenswert?

Setz erst mal die Fusebits richtig.
Ansonsten lügst du deinen Compiler nur an, wenn du ihm sagst, dass dein 
µC mit 8Mhz läuft und der tut das gar nicht.

Datenblatt rausholen. Nachsehen wie die CKSEL Bits stehen müssen, damit 
ein "External Crystal" eingestellt ist.

Danach: Kontrollieren (zb. mit einer Warteschleife die eine LED blinken 
lässt), ob der µC auch wirklich mit 8Mhz läuft.

Dann: Nochmal den 1-Wire Code probieren.
Persönliche Seite #1253263
Lesenswert?

Karl heinz Buchegger schrieb:

> Danach: Kontrollieren (zb. mit einer Warteschleife die eine LED blinken
> lässt), ob der µC auch wirklich mit 8Mhz läuft.

Bzw. Nachsehen, ob das Terminalprogramm auf dem PC mit 9600 Baud 
arbeitet, wenn die Meldung "0 DEVICE(S) DETECTED" kommt.

UBRRL=0x33; // 51dez sollte lt. Datenblatt 9600 Baud bei 8 MHz sein

Wenn das Terminalprogramm bei 1200 Baud richtig arbeitet, sind keine 8 
MHz aktiv sondern nur 1 MHz.
Persönliche Seite #1253288
Lesenswert?

Wenn der ATmega8515 über RS232 den Text "0 DEVICE(S) DETECTED" an den PC 
sendet, benutzt er eine Baudrate, die sich aus Taktrate und 
Baudrateneinstellung seiner UART ergibt.

Die Baudrateneinstellung kennst du bzw. die ist hier fix (UBRRL=0x33;). 
Die Baudrate kennst du auch. Das ist die Einstellung im Terminalprogramm 
auf dem PC. Damit kannst du auf die Taktrate schliessen!

Baudrate 9600 auf dem PC heisst die Taktrate auf dem ATmega8515 ist bei 
der Baudrateneinstellung oben 8 MHz.

Baudrate 1200 auf dem PC heisst die Taktrate auf dem ATmega8515 ist bei 
der Baudrateneinstellung oben 1 MHz.

Also ist deine Aufgabe: Im Terminalprogramm nachsehen, welche Baudrate 
eingestellt ist.
#1253297
Lesenswert?

Peter K. schrieb:
> Programmiert wird im CodeVision und verwenden tu ich den Atmel mega8515
> µController, oder willst du noch was anderes wissen?

nicht was sondern womit war die Frage !
Also womit wird das compilierte Programm in den AVR -Controller 
übertragen
(im allgemeinen Programmiergerät genannt )
oder in neudeutsch
wie flasht du den MC ?
#1253336
Lesenswert?

Wenn ich mich recht erinnere kann man das STK200 mit einem Quarz 
bestücken und dann gab es da noch eine Steckbrücke wo man Quarz oder 
Intern auswählen konnte.
Was du jetzt machst kommt darauf an was du machen möchtest.(  auweia  
)
also wenn du extern mit Quarz 8Mhz takten willst dann musst du das auch 
so einstellen.
Gast #1253502
Lesenswert?

Wenn ich jetzt diesen teil verändere und einen anderen Wert einfüge, 
bekomm ich am Display verschiedenste Zeichen, weiß einer weiter?

/* quartz crystal frequency [Hz] */
#define xtal 3000000L
Gast #1253554
Lesenswert?

@ Peter K.

Jetzt kommst Du mit dem ganzen Krempel unter mindestens 3 verschiedenen 
Fragestellungen.
Mach erst mal die einfachen Hausaufgaben, die Dir unter "DS1820 defekt?" 
(Thema bereits am 30.4.09  begonnen) gestellt wurden    oder Du hast 
nichts verstanden - dann lass es ganz sein
#1253584
Lesenswert?

Jetzt kenn  ich mich überhaupt nicht mehr aus.
Du wechselst deine Taktfrequenzen schneller als andere ihre Unterwäsche.

Also: Dein 1-Wire Code findet jetzt ein Device? Oder wie?
Lass dir doch mal den gefundenen ROM-Code des Sensors ausgeben. Der muss 
mit einer charakteristischen Sequenz anfangen. Mal sehen, ob das 
gefundene Device nur eine Falschmeldung war oder nicht.
Gast #1253946
Lesenswert?

Ich weiß langsam einfach nicht mehr weiter... Ein fertiges Programm 
könnte für das erste schon reichen, damit ich mal einen Überblick habe! 
Problem ist, dass ich keines für den CodeVision gefunden habe, das 
funktioniert,
#1253959
Lesenswert?

Peter K. schrieb:
> Ich weiß langsam einfach nicht mehr weiter... Ein fertiges Programm
> könnte für das erste schon reichen, damit ich mal einen Überblick habe!

Ein fertiges Programm für CodeVision sieht auch nicht anders aus, als 
das was du hast.

Dein Problem ist erst mal die Hardware.
Solange dein XTAL Wert nicht mit der Realität übereinstimmt, brauchst du 
nicht länger weiter zu suchen, weil sinnlos.

Punkt 1 auf deiner Liste muss lauten:
Der XTAL Wert muss mit der tatsächlich vorhandenen Taktfrequenz 
übereinstimmen.
Dazu muss sichergestellt sein, dass der am µC angeschlossene Quarz auch 
tatsächlich in Funktion ist. Dazu wiederrum muss der µC per Fuses davon 
in Kentniss gesetzt werden, dass an seinen Pins ein Quarz angeschlossen 
ist.

Solange du diese Hürde nicht packst, ist es sinnlos überhaupt nur 
weiterzudiskutieren.

Over and out
Gast #1253992
Lesenswert?

Kannst du mir hier mit dem XTAL -> Realität weiter helfen, ich habe 
jetzt schon in diesen Tutorials gelesen und gelesen, nur ich komm 
einfach nicht weiter. Wieso funktioniert dieser DS1820 bei sovielen 
anderen auf anhieb und bei mir geht einfach nichts weiter...


mfg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren