Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

1-wire, zapis i odczyt danych do DS18B20, same jedynki.

Gieno100 28 Lis 2006 22:22 1976 6
  • #1 28 Lis 2006 22:22
    Gieno100
    Poziom 10  

    Mam problrm z zapisem i odczytem danych do DS18B20. Program wykrywa czujnik jednak po podaniu komend do pomiaru temperatury a następnie odczytaniu danych z DS w zmiennych temp1 i temp2 są same jedynki. W tej postaci na wyświetlaczu mam "Ok11111111"

    Kod programu:


    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 6
  • #2 28 Lis 2006 22:54
    szod
    Poziom 33  

    Osobiście piszę w asm więc ten kod nie jest całkowicie jasny dla mnie, ale
    kilka pytań: na jaki to uC? No i podstawa: czy zmieniasz kierunek działania
    końcówki portu? Jak czytasz końcówka portu z DS-em jako wejście a jak
    zapisujesz to jako wyjście. Jakoś tego nie mogę tu wypatrzeć, ale mogę się
    mylić.

    0
  • #3 28 Lis 2006 23:09
    Gieno100
    Poziom 10  

    Zamiana funkcji portu reailozowana jest przez:
    #define WIRE_0 sbi(DDR1W, ONEWIRE) // ustaw 0 na wyjscie WIRE
    #define WIRE_1 cbi(DDR1W, ONEWIRE) // ustaw 1 na wyjscie WIRE
    i to działa ponieważ wykrywanie czujnika działa w porządku ale martwi mnie sam zapis komend i odczyt z czujnika czy to jest ok? bo czasy wydają się mi w porządku. Sam już nie wiem.

    0
  • #4 29 Lis 2006 19:15
    szod
    Poziom 33  

    No fakt, zmieniasz funkcje portu, tylko chyba zapomniałeś że po ustawieniu
    portu na wyjście trzeba ustawić na nim odpowiedni stan - 0 lub 1.
    Masz w kodzie:

    Code:

    #define PORT1W PORTC // port z podlaczanym 1Wire

    i nie używasz. Lepiej po ustawieniu portu w stan wyjściowy wymusić
    potrzebny stan niż bazować na tym że tam jest 1 albo 0. To może powodować błędy.
    Popraw te fragmenty kodu. Np. funkcja zapisu
    pojedynczego bitu: Piszesz tam WIRE_0 czyli port w stan wyjściowy, ale
    potem musisz wymusić tam 0. A tego nie ma.
    Druga sprawa to przyjrzyj się tej funkcji zapisu pojedyńczego bitu. Nie
    jestem pewny czy jest ok.
    Poza tym warto chyba zadeklarować konkretną końcówkę portu np. PORTC0
    gdzie jest podłączony czujnik, a nie cały port PORTC.

    0
  • #5 29 Lis 2006 21:58
    Gieno100
    Poziom 10  

    Chyba jednak nie masz racji 1 jest wymuszana gdy port przejdzie w stan wejcia przez rezystor podciągający, natomiat w stanie wyjscia jest podawane 0, sprawdzilem to i rzeczywiście po podaniu komendy WIRE_0 i sprawdzeniu stanu szyny 1 WIRE jest na niej 0. A zresztą sprawdzenie czy czujnik jest na szynie przebiega prawidłowo wiec jedynie pętla opóźnień delay moze niedziałać nieprawidłowo.

    0
  • #6 29 Lis 2006 23:18
    szod
    Poziom 33  

    Chodzi mi o pewność że na określonej końcówce portu po zmianie na
    wyjście jest stan który chcę. Bo robiąc tak jak Ty można się kiedyś
    zdziwić ;) Ja jak piszę to właśnie tak robię, no ale Ty zrobisz jak uważasz.

    0
  • #7 30 Lis 2006 01:16
    Gieno100
    Poziom 10  

    I miałem rację problem był z opóźnieniami ponieważ procesor pracuje na 1 Mhz to troszke czasu zajmowaly ykonywane instrukcje. po korekcie czasów wszystko ruszylo.

    0
  Szukaj w 5mln produktów