1 Wire Problem

Gast #1420427
Hallo zusammen!
Habe hier ein DS2762K und will es über die 1-Wire Leitung mit einem MC 
verbinden. Wenn ich jedoch das Reset Signal, bzw. die Leitung für 480us 
auf low ziehe und dann wieder auf high, sehe ich am Oszi, dass der 
Baustein die Leitung auf Null ziehen will, jedoch geht die Spannung nur 
um 0,2 Volt runter anstatt auf GND. Ich habe das Gefühl, dass das ein 
Masseproblem sein kann, hat vielleicht schon jemand damit Erfahrung 
sammeln können?
Gast #1420441
Dann musst Du Dich schlicht auf die Suche nach dem Etwas begeben, das 
die Leitung unerwünschterweise hochzieht (Externer Pullup-Widerstand? 
Interner Pullup im Controller? Pin irrtümlich auf Output konfiguriert?).
Gast #1420460
Zuerst wird der PIN ja als Ausgang deklariert!
Ich hatte mir das in etwa so gedacht!
Beispiel nur für den Reset.
1
DDRA|=(1<<PA0);
2
PORTA&=~(1<<PA0);
3
_delay_us(100);
4
_delay_us(100);
5
_delay_us(100);
6
_delay_us(80);
7
PORTA|=(1<<PA0);
8
_delay_us(100);
9
_delay_us(20);
10

11
DDRA&=~(1<<PA0);
12

13
if(PINA & (1<<PA0))
14
{ //hier müsste er dann auf GND gehen!
15
}
Oder kann man das nicht so machen?
Gast #1420489
Bei mir läuft folgender Code (Ursprung P. Dannegger) im Zweidrahtbetrieb 
mit einem 1k-Pullup nach +5V problemlos:
1
#define W1_PIN  PD6
2
#define W1_OUT  PORTD
3
#define W1_DDR  DDRD
4

5
  W1_OUT &= ~(1<<W1_PIN);
6
  W1_DDR |= 1<<W1_PIN;
7
   _delay_us( 240 );      // 480 us
8
   _delay_us( 240 );    
9
  cli();
10
  W1_DDR &= ~(1<<W1_PIN);
11
  _delay_us( 60); 
12
  sei();
13
  _delay_us( 207); 
14
  _delay_us( 207);
#1420503
Tommy schrieb:

> Zuerst wird der PIN ja als Ausgang deklariert!

Der Pin (PORTx Bit) wird auf 0 gesetzt und danach wird nur noch die 
Richtung geschaltet. Als Ausgang für 0-Pegel, als Eingang für 1. Der Pin 
darf nie aktiv auf 1 gezogen werden! Ausname: parasitäre Versorgung 
von Dingern wie den DS18x20 während der Messung, aber auch nur dann.
Gast #1420506
Habe den Fehler jetzt isolieren können! Habe zwar einen 4MHz Quarz dran, 
wenn ich allerdings mit _delay_us(1); eine 1us Pause machen will, sehe 
ich am Oszi eine Pause von 2,5 us. Bzw. ich ziehe für eine us die 
Leitung runter, aber auf dem Oszi sind es 2,5 us. Wenn ich alerdings aus 
eine us eine ms mache stimmt es wieder, wie kann das sein?
Moderator (Firma: Titel) Persönliche Seite #1420592
> _delay_us(1);
Bei einem Takt von 4 MHz wird einfach das "Drumrum" schon zuviel Zeit 
brauchen...
1
/**
2
   \ingroup util_delay
3

4
   Perform a delay of \c __us microseconds, using _delay_loop_1().
5

6
   The macro F_CPU is supposed to be defined to a
7
   constant defining the CPU clock frequency (in Hertz).
8

9
   The maximal possible delay is 768 us / F_CPU in MHz.
10

11
   If the user requests a delay greater than the maximal possible one,
12
   _delay_us() will automatically call _delay_ms() instead.  The user
13
   will not be informed about this case.
14
 */
15
void
16
_delay_us(double __us)
17
{
18
  uint8_t __ticks;
19
  double __tmp = ((F_CPU) / 3e6) * __us;
20
  if (__tmp < 1.0)
21
    __ticks = 1;
22
  else if (__tmp > 255)
23
  {
24
    _delay_ms(__us / 1000.0);
25
    return;
26
  }
27
  else
28
    __ticks = (uint8_t)__tmp;
29
  _delay_loop_1(__ticks);
30
}
Gast #1420681
Ist vielleicht schlecht ausgedrückt! Ich will keinen stabielen Takt, den 
habe ich durch den externen 4MHz Quarz. Ich will genau eine us warten.
Wie kann ich so ein delay erstellen? Ich programmiere in C, ist das 
damit unmöglich? Oder wird dafür ein Timer verwendet?
Gast #1430017
Bist Du sicher das die Fuses richtig eingestellt sind un der uC nicht 
mit einer anderen Frequ läuft (interner RC) ? Hat mich schon einiges an 
Zeit gekostet...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.