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
Codesammlung Wenn ihr eigene Programme oder Anleitungen geschrieben habt könnt ihr sie hier posten. Fragen werden gelöscht!
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.
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.
>Also wenn man das w1_init() VOR dem >w1_search() macht, könnte das helfen. Vergiss es ;) Ganz oben stehts ja nochmal.
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.
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 ?
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]);
Wayne du hast die Fuse Bits angesprochen. Kannst du mir vl helfen wie ich die richtig setze? mfg
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.
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...
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!
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.
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.
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!
Programmiert wird im CodeVision und verwenden tu ich den Atmel mega8515 µController, oder willst du noch was anderes wissen?
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.
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
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 ?
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
Danke für den Link, verwenden muss ich den Internen RC Osc.?
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-Tutorial:_Equipment
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
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.
Das gibt er mir im Terminal aus... unten steht 9600 Baut, sollte also passen?
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.
Ja wenn die 8MHz passen, wo könnte denn noch das Problem sein?
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
Das ist nun mein neuer C-Code, Probleme bestehen beim Takten des #define xtal 3000000L Weiß einer Rat, wie ich das schnellstens Löse?
@ 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
Da hat sich ja schon meine Frage gelöst, der DS1820 funktioniert ja... Nur gibt er mir jetzt irgendwelche Werte/ Zeichen raus
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.
Er findet nicht den Device sondern gibt irgendwelche Zeichen bei anderer Frequenz aus. Siehe Anhang Danke für die hilfe
Oder kann mir jemand einen fertigen DS1820 Code für den 8515 geben, dass ich mal ein Ergebnis sehen kann?
Im allgemeinen ist bei zunehmender Dunkelheit mit weniger Licht zu rechnen !
Das hat doch keinen Sinn, da ständig den Compiler anzulügen! Für XTAL kommt die Taktfrequenz deines Prozessors rein. Und nichts anderes.
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,
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
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.