logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

3 czujniki ds18b20 modyfikacja programu - zapłace...

85pablo 08 Paź 2009 08:23 1578 4
  • #1 7103075
    85pablo
    Poziom 10  
    witam szukam kogoś z wiedzą nt programowania atmegi8. mam termostat na ds18b20 ... chce go założyć w chlewni ale zeby miał 3 czujniki ...i działał jako termostat 3 sekcyjny ... zapłace za pomoc ... prosze bo sam nie dam rady ... bo porgrama mam napisany ale tylko dla 1 czujnika .... mój mail 85pablo(_at_)onet.eu lub gg 5652336 ... pozdrawiam pablo
  • #2 7103119
    Ibuprom
    Poziom 26  
    To powtórz swój program 3 razy za każdym razem zmieniając pin do którego podłączasz DS-a. Oczywiście DS-y podłączasz pod 3 wyjścia atmegi a co za tym idzie odpadają skomplikowane procedury identyfikacji czujników. Sprawdzasz jedynie czy czujnik jest podłączony czy nie, dalej odczytujesz z niego temperaturę o porównujesz z zadaną. Ustawiasz odpowiednio pin wyjścia sterujący przekaźnikiem.

    U mnie podobny sterujący obiegami C.O., C.W.U. oraz kolektora słonecznego (3 czujniki) + wyświetlacz LCD zmieścił się w 4KB kodu.
  • #3 7103292
    tmf
    VIP Zasłużony dla elektroda
    Identyfikacja czujnikow - znaczy implementacja ROMSearch to raptem kilkanascie linii kodu w C. Gotowe biblioteki sa w necie.
    Ibuprom: napisz cos wiecej o swoim sterowniku, masz jakies fotki, albo opis? Robie cos podobnego i ciekawi mnie jak inni do tego podeszli.
  • #4 7104341
    Ibuprom
    Poziom 26  
    Poza identyfikacją ROM-u trzeba jeszcze procedury przypisania czujnika, procedury na wypadek jego wymiany, etc. To już trochę więcej linijek kodu. A jak każdy czujnik ma swój pin w procesorze to mnóstwo problemów odpada.
    Swoim sterownikiem się nie pochwalę bo nie był robiony na pokaz - choć niczego mu nie brakuje - ma nawet ładną obudowę :)
  • Pomocny post
    #5 7106985
    piti___
    Poziom 23  
    Ibuprom napisał:
    To powtórz swój program 3 razy za każdym razem zmieniając pin do którego podłączasz DS-a.


    Zamiast kopiować kilkukrotnie procedury wystarczy zrobić coś takiego:

    
    void select_bus(unsigned char bus_nr)
    {
       if(bus_nr == 1)
       {
          ddr_reg  = (unsigned char *)0x31;          // DDRD
          bus_pin  = (1<<5);
          port_reg = (unsigned char *)0x32;          // PORTD    
          pin_reg  = (unsigned char *)0x30;          // PIND
       }                   
       else
       {
          ddr_reg  = (unsigned char *)0x34;          // DDRC         
          bus_pin  = (1<<0);
          port_reg = (unsigned char *)0x35;          // PORTC   
          pin_reg  = (unsigned char *)0x33;          // PINC 
       }
    }
    
    #define DDR_DQ_OUT       *ddr_reg |= (bus_pin);
    #define DDR_DQ_IN        *ddr_reg &=~(bus_pin);
    
    #define DQ_OUT_1         *port_reg |= (bus_pin);
    #define DQ_OUT_0         *port_reg &=~(bus_pin);
    #define DQ_IN            ((*pin_reg) & (bus_pin))
    


    Pozdrawiam
REKLAMA