- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: Probleme mit 1-wire

  1. #1
    Neuer Benutzer Öfters hier Avatar von Ethernut
    Registriert seit
    23.10.2012
    Beiträge
    14

    Probleme mit 1-wire

    Anzeige

    Powerstation Test
    Liebe Forumsgemeinde,

    ich habe vor kurzem auch einen Thread erstellt bzgl. des Regelns. Bin aber auf ein Zwischenhindernis gestoßen. Ich brauche für einen Regler ja einen AD Wandler. Mir wurde der Dallas DS18S20 vorgegeben.
    Nur habe ich zur Zeit das Problem, dass dieser mir laufend nur 1er liefert. Hier mal der Code:

    main.c:

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    #include <stdio.h>
    
    #include "UART.h"
    #include "1wire.h"
    
    
    int main(void)
    {
        DDRC=0xFF;
        PORTC=0xFF;
        USART_Init(103);
    
        sei();
        rs232_printf("Test 1\n");
        rs232_printf("Reset: %d\n", OWTouchReset());  //gibt 0 zurück
        rs232_printf("Test 2\n");
    
        while(1)
        {
            rs232_printf("Endwert: %d\n",OWReadByte());  //ganzes Byte auslesen
          _delay_ms(1500);
      }
        return 0;
    }
    1wire.c:

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    #include <stdio.h>
    
    #include "UART.h"
    #include "1wire.h"
    
    //-----------------------------------------------------------------------------
    // Generate a 1-Wire reset, return 1 if no presence detect was found,
    // return 0 otherwise.
    // (NOTE: Does not handle alarm presence from DS2404/DS1994)
    //
    int OWTouchReset(void)
    {
        int result;
    
        _delay_us(0);
        DDRD&=(0<<PD6);         // Drives DQ low
        PORTD=0x0;
        _delay_us(480);
        DDRD&=(1<<PD6);         // Drives DQ high
        PORTD=0b01000000;
        _delay_us(70);
        DDRD&=(0<<PD6);         // Drives DQ low
        PORTD=0x0;
        result=(PIND&0b01000000);
        DDRD&=(1<<PD6);         // Drives DQ high
        PORTD=0b01000000;
        _delay_us(410);
        return result; // Return sample presence pulse result
    }
    
    //-----------------------------------------------------------------------------
    // Read a bit from the 1-Wire bus and return it. Provide 10us recovery time.
    //
    int OWReadBit(void)
    {
        int result;
    
        DDRD&=(0<<PD6);         // Drives DQ low
        PORTD=0x0;              //hier muss ich PORTD eh auf 0 setzen, oder?
        _delay_us(15);
        DDRD|=(1<<PD6);
        PORTD=0b01000000;
        _delay_us(12);
        result=(PIND&0b01000000)>>6;
        rs232_printf("result = %d\n",result);
        _delay_us(55);
    
        return result;
    }
    
    //-----------------------------------------------------------------------------
    // Read 1-Wire data byte and return it
    //
    int OWReadByte(void)
    {
        volatile int loop, result=0,zwischen=0;
    
        for (loop = 0; loop < 8; loop++)
        {
            zwischen=OWReadBit();
            //rs232_printf("%d\n", zwischen);
            result=result|(zwischen<<loop);
        }
        rs232_printf("gesendet\n");
        return result;
    }

    Ich empfange nur 1er. Ich versuche mich an diese Webseite mit den Verzögerungen
    zu orientieren:

    http://www.maximintegrated.com/app-n...dex.mvp/id/126

    Hab auch die Funktionen daraus entnommen. Alles wird über PIN 6
    gesteuert.

    Kann mir bitte einer sagen was ich da falsch mache? Irgendwie habe ich
    das Gefühl, dass ich das nicht richtig verstehe.

    Liebe Grüße,
    Ethernut

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    hallo,
    verstehe die Zeile DDRD|=(1<<PD6); nicht, meiner Meinach müsste das DDRD.6 au 0 gesetzt werden, PORTD.6 auf 1 (Eingang mit PullUp)
    mfg
    Achim

Ähnliche Themen

  1. Probleme mit dem 1-Wire am Mega32
    Von elkokiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 08.03.2009, 11:22
  2. 2-wire 3-wire protokoll. Hilfe!
    Von schlaflos im Forum Assembler-Programmierung
    Antworten: 3
    Letzter Beitrag: 18.01.2008, 13:53
  3. 1-Wire RS232 half-duplex mit 115200 Baud??
    Von m@rkus33 im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 02.11.2007, 15:15
  4. 1-Wire Infrarotübertragung
    Von Richi 007 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 19.10.2007, 20:10
  5. One Wire / 1 Wire mit PIC ?
    Von DHigh im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 24.08.2005, 20:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test