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
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
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
