mikrocontroller.net

Forum: Compiler & IDEs delay auf atmega für onewire


Autor: Andreas Koch (eisenkoch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem.
Meine OnewireBusAbfrage funktioniert nicht. Es ist sehr schwierig 
einzukreisen . Immer bekomme ich nur "no sensor found"
*Port am Atmega habe ich getauscht
*DS18S20 gegen anderen ausgetauscht
*Pins kontoliert
*etc....

ich vermute es hängt mit dem delay zusammen, daher habe ich folgendes 
gemacht

------
 #include <avr/delay.h>
 .
 .
 .
 printf_P (PSTR("=> start 5sec\r\n"));
 _delay_us(5000000);
 printf_P (PSTR("=> stop 5sec\r\n"));
------
das sollte doch 5 sec pause machen, oder?

auch die quellen von 
http://www.siwawi.arubi.uni-kl.de/avr_projects/tem... 
bringen mich nicht weiter. Wo kann ich ansetzen

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstens wäre es Unfug, mit einer µs-Delay-Funktion eine Verzögerung im 
Sekundenbereich erreichen zu wollen, da es immerhin auch eine 
_delay_ms()-Funktion gibt.

Zweitens: Die _delay_xx()-Funktionen sind begrenzt. Man sollte in 
solchen Fällen nicht in irgendwelchen ominösen Weblinks rumsuchen, 
sondern einfach einen Blick in die AVR-libc-Dokumentation werfen. Da 
steht die maximale Zeit, die mit einem _delay_us und einem _delay_ms 
möglich ist (abhängig von der Taktfrequenz des µC).

Drittens sind die _delay_xx()-Funktionen für kurze Verzögerungen gedacht 
und keinesfalls für Verzögerungen im Sekundenbereich (die man sowieso 
vermeiden sollte). Für so was gibts, wenn erforderlich, Timer.

Autor: Andreas Koch (eisenkoch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gut...
war ja auch nur als Beispiel gedacht, das eigentliche Problem ist das 
der selbst der code von: 
http://www.siwawi.arubi.uni-kl.de/avr_projects/tem...
keinen Sensor findet. Wo kann ich suchen /typische Fehlerquellen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1-wire geht aber auch mit Timer:

Beitrag "DS1820, DS18B20 in C"


Peter

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void wait (uint16_t zeit) //zeit: wartezeit in ms (0 bis 65536)
{
   uint16_t i;
   for(i=0;i<zeit;i++) _delay_ms(1);
} 

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pull-Up-Widerstand vergessen?

Gruß Elektrikser

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.