Witam
Zachęcony sukcesami z płytką EVB 4.3 zaprojektowałem i zamówiłem swoją - na początek z AtMega8 w DIP. Do tego pamięć 24C32 oraz układ do RS485. Wszystkie układy mają kondensatory 100 nF ( stabilizator 7805 również + jeden elektrolit ). Całość ze złączem pod wyświetlacz 2*24 ( właściwe 4*12 )
Reset przez rezystor 10 K do +5V
AtMega8L ( na 8 MHz max )
Kwarc 8 MHz około 1 cm od układu + dwa kondensatory 18 pF
Fusebit
KLA987 001111
BODLEVEL 4.0V
BODEN: Disabled
Przykładowe programy wyświetlający tekst oraz drugi regulujący jasność podświetlania przez PWM działają poprawnie to trzeci ( działający poprawnie na Mega32 ) mający obsługiwać termometr na DS18B20 niestety świruje, wyświetla krzaki, kilka razy udało się, że zadziałał jednak po resecie przyciskiem już nie.
RESET też dziwnie działa - powinno chyba wszystko zniknąć z ekranu przy naciśnięciu RESET, świecą się dwie linie.
Dodatkowo nie wyświetla moich znaków, które sobie utworzyłem przez Deflcdchar - wyświetlane jest coś zupełnie innego - jakieś krzaczki
Czy problem może być w Fusebitach lub w pracy procesora na granicy częstotliwości ?
Program wygląda tak:
Zachęcony sukcesami z płytką EVB 4.3 zaprojektowałem i zamówiłem swoją - na początek z AtMega8 w DIP. Do tego pamięć 24C32 oraz układ do RS485. Wszystkie układy mają kondensatory 100 nF ( stabilizator 7805 również + jeden elektrolit ). Całość ze złączem pod wyświetlacz 2*24 ( właściwe 4*12 )
Reset przez rezystor 10 K do +5V
AtMega8L ( na 8 MHz max )
Kwarc 8 MHz około 1 cm od układu + dwa kondensatory 18 pF
Fusebit
KLA987 001111
BODLEVEL 4.0V
BODEN: Disabled
Przykładowe programy wyświetlający tekst oraz drugi regulujący jasność podświetlania przez PWM działają poprawnie to trzeci ( działający poprawnie na Mega32 ) mający obsługiwać termometr na DS18B20 niestety świruje, wyświetla krzaki, kilka razy udało się, że zadziałał jednak po resecie przyciskiem już nie.
RESET też dziwnie działa - powinno chyba wszystko zniknąć z ekranu przy naciśnięciu RESET, świecą się dwie linie.
Dodatkowo nie wyświetla moich znaków, które sobie utworzyłem przez Deflcdchar - wyświetlane jest coś zupełnie innego - jakieś krzaczki
Czy problem może być w Fusebitach lub w pracy procesora na granicy częstotliwości ?
Program wygląda tak:
Code:
$regfile = "m8def.dat" 'definicja procesora
$crystal = 8000000 'taktowanie procesora
$hwstack = 32 ' rozmiar stosu sprzętowego
$swstack = 10 ' rozmiar stosu
$framesize = 40 ' rozmiar ramki
Config Debounce = 30
'********************* 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 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32 ' znak stopnia celcjusza
'********************* Konfiguracja magistrali I2C
Config I2cdelay = 10 ' domyślnie tryb Slow
Config Sda = Portc.4
Config Scl = Portc.5
'********************* Konfiguracja podświetlania
Config Portc.2 = Output 'Pin R/W wyświetlacza
Reset Portc.2
Config Portb.0 = Output 'Podswietlanie Niebieskie
Set Portb.0
'Config Portb.1 = Output 'Podswietlanie Czerwone
'Reset Portb.1
'Config Portb.2 = Output 'Podswietlanie Zielone
'Set Portb.2
'********************* Konfiguracja magistrali 1-Wire
Config 1wire = Portc.0
'********************* Konfiguracja Timer2
'Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'Enable Timer1
Enable Interrupts
'********************* Deklaracje zmiennych
Dim Ds1(8) As Byte 'zmienna określająca numer układu
Dim Ds2(8) As Byte 'zmienna określająca numer układu
Dim Ss1 As String * 6
Dim Ss2 As String * 6
Dim T1 As Integer 'zmienna odczytu dwóch bajtów z DS18B20
Dim T2 As Integer 'zmienna odczytu dwóch bajtów z DS18B20
'********************* Deklaracja podprogramów
'********************* Przypisanie przyjaznych nazw do poszczególnych portów - Aliasów
'********************* Wartości początkowe
Cursor Off
Cls
Ds1(1) = 1wsearchfirst() 'szukanie pierwszego układu
Ds2(1) = 1wsearchnext()
'Pwm1a = 140 'podświetlanie czerwone
'Pwm1b = 0 'podświetlanie zielone
Do
'Locate 1 , 13
'Lcd "test"
Locate 2 , 13
Lcd Chr(0)
'********** magistrala 1-wire wejście 1 czujnik 1
Disable Interrupts
1wreset 'reset magistrali 1-wire
1wwrite &H55 'rozkaz adresowy SKIP ROM
1wverify Ds1(1) 'sprawdź adres
1wwrite &HBE 'rozkaz funkcyjny polecenie odczytu DS18B20
T1 = 1wread(2) 'odczytaj dwa pierwsze bajty
'********** magistrala 1-wire wejście 1 czujnik 2
1wreset 'reset magistrali 1-wire
1wwrite &H55 'rozkaz adresowy SKIP ROM
1wverify Ds2(1) 'sprawdź adres
1wwrite &HBE 'rozkaz funkcyjny polecenie odczytu DS18B20
T2 = 1wread(2) 'odczytaj dwa pierwsze bajty
'********** konwersja temperatury dla drugiego DS18B20
1wreset
1wwrite &HCC
1wwrite &H44
Enable Interrupts
'**************** pierwsze wejście - pierwszy DS18B20 obliczenia + wyświetlanie **********
T1 = T1 * 10
T1 = T1 / 16
Ss1 = Str(t1)
Ss1 = Format(ss1 , " 0.0") 'formatuj według wzorca - jedno miejsce po przecinku
Locate 1 , 1 'wyświetl w pozycji
Lcd Ss1 ; " C " 'wyświetl wynik formatowania + znak specjalny + C
'**************** pierwsze wejście - drugi DS18B20 obliczenia + wyświetlanie **********
T2 = T2 * 10
T2 = T2 / 16
Ss2 = Str(t2)
Ss2 = Format(ss2 , " 0.0") 'formatuj według wzorca - jedno miejsce po przecinku
Locate 2 , 1 'wyświetl w pozycji
Lcd Ss2 ; " C " 'wyświetl wynik formatowania + znak specjalny + C
Loop
End