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

Atmega8 - dodatkowe układy - długość połączeń

maximus22_kr 06 Paź 2011 22:06 1655 4
  • #1 10000342
    maximus22_kr
    Poziom 18  
    Witam
    Mama "swoją" płytkę z Atmega8 ( kwarc 4MHz, EEPROM, MAX485 ), która jest połączona z drugą na której jest wyświetlacz oraz klawiatura 5 przycisków na PCF8574. Wszystkie sygnały - do LCD, GND i VCC oraz I2C idą jedną taśmą łączącą płytki. Jednak nie byłem przewidujący i zapomniałem o pinie INT układu PCF8574, dolutowałem do wyprowadzenia układu przewód z 20 cm i podpiąłem do wyprowadzenia INT1 Atmega8.

    Prosty program
    
    $regfile = "m8def.dat"                                      'definicja procesora
    $crystal = 4000000                                          'taktowanie procesora
    $hwstack = 32                                               ' rozmiar stosu sprzętowego
    $swstack = 10                                               ' rozmiar stosu
    $framesize = 40                                             ' rozmiar ramki
    
    
    '********************* Konfiguracja wyświetlacza
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portc.3 , Rs = Portc.1
    Config Lcd = 24 * 2
    
    '********************* Konfiguracja znaku specjalnego LCD
    Deflcdchar 0 , 2 , 4 , 14 , 17 , 17 , 17 , 17 , 14          'znak "ó"
    Deflcdchar 1 , 32 , 8 , 8 , 12 , 24 , 8 , 6 , 32            ' znak"ł"
    
    '********************* Konfiguracja magistrali I2C
    
    Config I2cdelay = 10                                        ' domyślnie tryb Slow
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    '********************* Konfiguracja podświetlania
    
    Config Portb.0 = Output                                     'Podswietlanie Niebieskie
    Reset Portb.0
    
    Config Portb.1 = Output                                     'Podswietlanie Czerwone
    Reset Portb.1
    
    Config Portb.2 = Output                                     'Podswietlanie Zielone
    Reset Portb.2
    
    Config Portd.3 = Input
    
    '********************* Konfiguracja przerwania Int1
    
    Config Int1 = Falling
    
    On Int1 Pcf_int1
    
    Enable Interrupts
    
    Enable Int1
    
    '********************* Deklaracje zmiennych
    Dim A As Bit
    Dim B As Bit
    Dim C As Bit
    Dim D As Bit
    Dim E As Bit
    
    Dim Pcf8574port As Byte
    
    Const Pcf8574write = 66
    Const Pcf8574read = 67
    
    Niebieski Alias Portb.0
    Czerwony Alias Portb.1
    Zielony Alias Portb.2
    
    Niebieski = 1
    
    Cursor Off
    
    Cls
    
    '******** Ustawienie pinów PCF8574 ( 1 - wejście, 0 - wyjście )
    I2cstart
    I2cwbyte Pcf8574write
    I2cwbyte 255
    I2cstop
    
    Do
    
     Locate 1 , 13
     Lcd Bin(pcf8574port)
     Locate 2 , 13
     Lcd Pcf8574port.1
    
    '******** odczyt poszczególnych wejść układu
    Loop
    
    Pcf_int1:
    '******** odczyt  układu PCF8574
      Waitms 10
      I2cstart
      I2cwbyte Pcf8574read
      I2crbyte Pcf8574port , Nack
      I2cstop
      If Pcf8574port.0 = 0 Then
      Czerwony = 1
      Else
      Czerwony = 0
      End If
    
    Return
    End
    
    


    działa fatalnie, tzn. jeśli ściskam w ręku ten przewód INT to działa, jeśli go puszczę to przestaje, dodałem obsługę tej klawiatury do innego programu obsługującego zegar RTC - zaczyna się spóźniać i termometry DS18B20, to zegar przestaje działać, termometry "stoją" na ostatnio obliczonej temperaturze. Jakby cały procesor się zatrzymał - dolutowałem, nawet brakujący kondensator 100 nF do PCF8574, ale to nic nie zmieniło - bez "uścisku" przewodu INT nie działa.

    UPPS
    No tak, dałem tranzystor NPN i działa
  • #2 10000466
    GSM
    Poziom 25  
    Witam,

    tranzystor? On tam niepotrzebny. :?
    Objawy sugerowałyby bardziej, że linia wisi sobie w powietrzu, czy wewnętrzny pull-up włączony lub lepiej na zewnątrz jest odpowiedni pull-up na płytce?
    Schemat jest zawsze pomocny w pomaganiu...

    Pozdrawiam,
    GSM
  • #3 10000516
    maximus22_kr
    Poziom 18  
    Jeśli chodzi o przewód to jest dokładnie tak jak Kolega pisze, wisi/leży. Jednak ten tranzystor faktycznie bez sensu, dalej nie działa jak trzeba. Dodatkowo termometr w obu wskazaniach pokazuje tę samą temperaturę, braną z jednego czujnika.

    Rezystorów podciągających nie ma - zostawiłem cztery wolne piny ( w tym INT0 i INT1 ) jako wejścia/wyjścia

    Co by Kolega poradził ? rezystor podciągający dać dla INT?
  • #4 10000648
    janbernat
    Poziom 38  
    Skręcić dwa kabelki- jeden do mas obu płytek a drugi- sygnałowy.
    Albo zastosować zamiast taśmy- przewód taki jak do sieci lokalnej.
    Parami -masy- sygnały.
    Jak ręką odjął.
REKLAMA