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

Atmega162 + ds18b20 - coś nie działa

DrV 26 Maj 2009 19:21 1310 1
  • #1 6578075
    DrV
    Poziom 10  
    Witam,

    złożyłem płytkę, napisałem kod i coś nie działa, narazie podam kod bo płytka śmiga byłbym wdzięczny za sugestie co jest nie tak że to nie chce działać, kod zbudowany po części w CodevisionAVR.
    Wyświetlacz jest na wspólnej Katodzie stąd mój wniosek że aby zaświecić jakiś segment muszę wysłać 0 na pin, a aby go zgasić 1. Jeżeli źle myślę to poprawcie mnie.



    
    #include <mega162.h>
    #include <1wire.h>
    #include <math.h>
    #include <ds18b20.h>
    
    // 1 Wire Bus functions
    #asm
       .equ __w1_port=0x07 ;PORTE
       .equ __w1_bit=1
    #endasm
    
    
            
    int btos (int f)
    {
        int fg=0;
        
        switch(f){
                  case 0: fg=11000000;
                  break;
                  case 1: fg=11111100;
                  break;
                  case 2: fg=10010101;
                  break;
                  case 3: fg=10011000;
                  break;
                  case 4: fg=10101011;
                  break;
                  case 5: fg=10001001;
                  break;
                  case 6: fg=10000001;
                  break;
                  case 7: fg=11011100;
                  break;
                  case 8: fg=10000000;
                  break;
                  case 9: fg=10001000;
                  break;
                  default: fg=00000000;
                  break;
                  }
       
        return fg;
    }
    
    
    int ultos (int h)
    {
        int cl=0;
        
        switch(h){
                  case 0: cl=11000000;
                  break;
                  case 1: cl=11111100;
                  break;
                  case 2: cl=11111100;
                  break;
                  case 3: cl=10010101;
                  break;
                  case 4: cl=10010101;
                  break;
                  case 5: cl=10011000;
                  break;
                  case 6: cl=10011000;
                  break;
                  case 7: cl=10101011;
                  break;
                  case 8: cl=10001001;
                  break;
                  case 9: cl=10001001;
                  break;
                  case 10: cl=10000001;
                  break;
                  case 11: cl=10000001;
                  break;
                  case 12: cl=11011100;
                  break;
                  case 13: cl=10000000;
                  break;
                  case 14: cl=10000000;
                  break;
                  case 15: cl=10001000;
                  break;
                  default: cl=11000000;
                  break;
                  }
       
        return cl;
    }
    
    
    // Declare your global variables here
     int Temp;
     int i,d,j;
    
    void main(void)
    {
    
    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=0x80;
    CLKPR=0x00;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    
    //na wyswietlaczu przed 1 pomiarem powinno byc h4x
    
    DDRA=0xFF;
    PORTA=00100101;
    
    DDRB=0xFF;
    PORTB=10101011;
    
    DDRC=0xFF;
    PORTC=0xff;
    
    DDRD=0xFF;
    PORTD=10100101;
     
    DDRE=0x00;
    PORTE=0x00;
    
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // Timer/Counter 3 initialization
    // Clock value: Timer 3 Stopped
    // Mode: Normal top=FFFFh
    // OC3A output: Discon.
    // OC3B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 3 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR3A=0x00;
    TCCR3B=0x00;
    TCNT3H=0x00;
    TCNT3L=0x00;
    ICR3H=0x00;
    ICR3L=0x00;
    OCR3AH=0x00;
    OCR3AL=0x00;
    OCR3BH=0x00;
    OCR3BL=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    // Interrupt on any change on pins PCINT0-7: Off
    // Interrupt on any change on pins PCINT8-15: Off
    MCUCR=0x00;
    EMCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    ETIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    
    // 1 Wire Bus initialization
    w1_init();
    ds18b20_init(0,0, 250, DS18B20_12BIT_RES);
    
    while (1)
          {
                   
        //Temp = ds18b20_temperature(&rom_code[0][0]);
        Temp = ds18b20_temperature(0); 
              
        i=Temp;
        d = i/10;       //część dziesiętna
        j = i-(d*10);   //część jedności
           
        PORTD =btos(d);
        PORTB =btos(j)&01111111;
        
        if(Temp>0)
            PORTC = 0xff;
            else
            PORTC = 0x00;    
        
        Temp=Temp << 4;
         Temp=Temp & 1111;
            
            PORTA = ultos(Temp);
            
          };
    }
    
    


    Dzięki i Pozdro.
  • #2 6579517
    michalko12
    Specjalista - Mikrokontrolery
    Ja bym się jednak zastanowił, czy aby na pewno wiesz co i gdzie przypisujesz. Spróbuj znaleźć gdzieś w manualu kompilatora czy akceptuje on zapis binarny, a może jeszcze znajdziesz jaki powinien mieć format. Powodzenia...
REKLAMA