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

ATMEGA8535 IO problem z ciągłą 1

balbin89 16 Sty 2011 23:49 941 2
REKLAMA
  • #1 9016875
    balbin89
    Poziom 11  
    Witam, mam taki obwód:
    ATMEGA8535 IO problem z ciągłą 1

    gdy dioda świeci na PC6 ATMEGI podawana jest 1 i pisze w AVR Studio coś takiego:
    Cytat:
    #include <avr/io.h>
    int main (void)
    {
    DDRC &= _BV(6); //PC6 na wejscie czyli 0
    DDRC |= _BV(0); //PC0 na wyjscie czyli 1
    PORTC &= _BV(6); //PC6 na 0
    PORTC &= _BV(0); //PC0 na 0

    while (1)
    {
    if (bit_is_set(PINC, PC6)) { //gdy na PC6 jest 1
    PORTC |= _BV(0); //PC0 na 1
    }
    }


    i powinno dać mi 1 na PC0 i w gruncie rzeczy daje ale cały czas od uruchomienia układu czy dioda LED świeci czy nie na PC0 jest 1. Czy coś ze schematem jest nie tak czy źle programuje już nie mam pomysłu jak to rozwiązać, z góry dodam że przeszukując forum nie znalazłem rozwiązania mojego problemu. A i dodam, że masa jest wspólna.
  • REKLAMA
  • #2 9017004
    Azonic_2006
    Poziom 17  
    Witam!!!
    Po pierwsze ten schemat jest dziwny.
    PC6 ma być wejściem czy wyjściem?
    Po drugie Makro _BV działa tak:
    zmienna |= _BV(numer_bitu); // ustawienie bitu
    zmienna &= ~_BV(numer_bitu); //zgaszenie bitu
    zmienna ^= _BV(numer_bitu); // przełączenie bitu
    czyli brakuje negacji przy gaszeniu bitu.

    Napisze na szybko program który powinien działać.

    #include <avr/io.h> 
    int main (void) 
    { 
     DDRC &=~_BV(6); //PC6 jako wejście wpisujemy 0
     DDRC |= _BV(0); //PC0 jako wyjście wpisujemy 1
     PORTC &=~ _BV(6); //PC6 wpisujemy 0 czyli musimy zewrzec styk do vcc
     PORTC &=~ _BV(0); //PC0 na 0 
    
     while (1) 
     {
      if (PINC & 0x40) //gdy na PC6 jest 1
      {  
       PORTC |= _BV(0); //PC0 na 1 
      } 
      else
      {
       PORTC &=~ _BV(0); //PC0 na 0
      }
     }
    }

    Pozdrawiam!!!
    Azonic_2006
  • #3 9018349
    balbin89
    Poziom 11  
    PC6 ma być wejściem, niestety po sprawdzeniu zaproponowanego kodu jest ten sam efekt przy uruchomieniu na PC0 jest od razu 1 czyli pomimo że przez obwód diody nie płynie prąd to jakby ATMEGA uznawała że na PC6 jest 1 choć tak naprawdę nie ma 1 sprawdzałem miernikiem i nie ma przy włączonym układzie żadnego prądu na PC6. Jest to skrócony schemat mianowicie chodzi o to że mam pewien układ i dioda LED oznacza stan włączenia lub wyłączenia, więc podpiełem przez rezystor 100k pod UC, połączone mam masy i chce odczytywać stan tej diody na US, ale niestety efekt jest taki, że mam zawsze 1 na wejściu PC6.

    Dodano po 48 [minuty]:

    Rozwiązałem problem jednak wina była od strony budowy układu, wystarczyło podpiąć dodatkowo PC6 przez rezystor pod masę, żeby na pewno było tam 0 bo jednak jakiś prąd musiał tam być. Takie małe przoczenie mogło tyle czasu zmarnować na programowanie na tysiące sposobów:D
REKLAMA