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

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

maximus22_kr 06 Paź 2011 22:06 1454 4
  • #1 06 Paź 2011 22:06
    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

    Code:

    $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

    0 4
  • Sklep HeluKabel
  • #2 06 Paź 2011 22:33
    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

    0
  • Sklep HeluKabel
  • #3 06 Paź 2011 22:45
    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?

    0
  • #4 06 Paź 2011 23:22
    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ął.

    0