mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS18S20 - STK200 mit 8515 Controller


Autor: Peter K. (chrisstar)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Codesammlung
Wenn ihr eigene Programme oder Anleitungen geschrieben habt könnt ihr 
sie hier posten. Fragen werden gelöscht!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verschoben

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der angegebene Sourcecode ist nicht ausreichend für ein vollständiges 
Programm.

Es fehlen mindestens die Definitionen der Funktionen w1_init(), 
w1_search() und  ds1820_temperature_10(). Das sind genau die Funktionen, 
die etwas mit dem 1Wire, d.h. dem Problem zu tun haben können.

Autor: holger (Gast)
Datum:

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

// 1 Wire Bus initialization
w1_init();


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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also wenn man das w1_init() VOR dem
>w1_search() macht, könnte das helfen.

Vergiss es ;) Ganz oben stehts ja nochmal.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The primary specification difference between the two parts is the 
temperature conversion time: DS1820 = 500ms (max) and DS18S20 = 750ms 
(max).
timing problem ?
Sind die Fuse Bit's richtig gesetzt - auf 8Mhz !
und und und ?

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]);

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wayne du hast die Fuse Bits angesprochen. Kannst du mir vl helfen wie 
ich die richtig setze?

mfg

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe das im CoedVision gefunden, wo ich sie setzen kann, aber habe 
keinen Plan was ich hier zu tun habe, habe auch schon was gelesen, weiß 
aber nicht weiter...

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was muss ich dann machen Stefan, kannst mir hier ein wenig 
programmtechnisch helfen, was ich zutun habe, bzw was im Code fehlt

Danke für die Hilfe!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sehe ich am Terminal ob er mit 8MHz läuft. Sorry wenn ich so frage, 
aber das mit den Fuses und so ist mir gerade ganz neu.

Vielen Dank für die Hilfe!

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie programmierst du eigentlich den AVR auf dem STK200 , also welchen 
ISP Programmer benutzt du ?

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programmiert wird im CodeVision und verwenden tu ich den Atmel mega8515 
µController, oder willst du noch was anderes wissen?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.engbedded.com/fusecalc/

Der ultimative online Fuse Calculator :-))

probier es halt damit wenn du zu faul bist das Datenblatt zu 
konsultieren,
und nein es gibt keine Datenblätter in Deutsch :P

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Peter K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem ISP Interface wird der Code übertragen, Der compiler compliert 
eine HEX die er dann rüber schickt.
Drücke hier nur Programm all und dann geht das automatische (siehe Bild)

mfg

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Link,

verwenden muss ich den Internen RC Osc.?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du einen Quarz physikalisch ein deinem µC?

Wenn ja, dann willst du einen "external Crystal" haben

http://www.mikrocontroller.net/articles/AVR_Fuses

Es schadet auch nicht, sich mal die Einführungsseite des Tutorials 
durchzulesen. Da beschäftigt sich so mancher Abschnitt mit der 
Taktversorgung eines µC

http://www.mikrocontroller.net/articles/AVR-Tutori...

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am STK200 gibt es einen Crystal mit 8MHz, habe ich im Datenblatt 
gesehen, aber keine erklärung wie ich sie setze, probier es mal mit 
deinem Link

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das gibt er mir im Terminal aus... unten steht 9600 Baut, sollte also 
passen?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das sollte dann stimmen mit den 8 MHz.

Ich bin der 1wire.h und w1_init()... Geschichte nachgegangen. Das sind 
anscheinend Bibliotheken von CodevisionAVR (CodevisionAVR User Manual 
http://www.arctan.ca/files/CVAVRMAN2.pdf => Seite 163 und folgende).

Da ich nicht vor habe, von AVR-GCC zu CodevisionAVR zu wechseln, melde 
ich mich hier ab.

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja wenn die 8MHz passen, wo könnte denn noch das Problem sein?

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt erscheint im Terminal statt 0 Devices -> -999.9C

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das ist nun mein neuer C-Code, Probleme bestehen beim Takten des #define 
xtal 3000000L

Weiß einer Rat, wie ich das schnellstens Löse?

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat sich ja schon meine Frage gelöst, der DS1820 funktioniert ja... 
Nur gibt er mir jetzt irgendwelche Werte/ Zeichen raus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Er findet nicht den Device sondern gibt irgendwelche Zeichen bei anderer 
Frequenz aus.

Siehe Anhang

Danke für die hilfe

Autor: Peter K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei 6000000 zeigt es mir das an.. usw...

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder kann mir jemand einen fertigen DS1820 Code für den 8515 geben, dass 
ich mal ein Ergebnis sehen kann?

Autor: Dauergast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im allgemeinen ist bei zunehmender Dunkelheit mit weniger Licht zu 
rechnen !

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hat doch keinen Sinn, da ständig den Compiler anzulügen!

Für XTAL kommt die Taktfrequenz deines Prozessors rein. Und nichts 
anderes.

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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,

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The primary specification difference between the two parts is the
temperature conversion time: DS1820 = 500ms (max) and DS18S20 = 750ms
(max).

Ich verwende den DS18S20... wie stelle ich hier das Timing richtig ein? 
Bitte um konkrete Hilfe, wie ich das im CodeVision umsetze

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir keiner mit meinem Problem helfen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.