Konfiguracja zewnętrznych elementów ATmega8, początkujący, pytania


Witam
Ostatnio z powiedzeniem (nieoceniona Twoja pomoc mirley) przebrnąłem przez uruchomienie pierwszego układu tj. termometr na DS18B20 na mega8...
I na przyszłość nie daje mi spokoju konfiguracja elementów zew. na Atmega8 tzn.

Ja mam tak:
Tzn.
1. Na Vcc do +5V i kondesator 100n do masy
2. Na AVcc do +5V i kondesator 100n do masy
3. Obie masy połączone.
4. Na AREF kondesator do masy

Nie mam dławika od AVCC, bo słyszałem, że jeśli przetworniki A/C nie są wykorzystywane to można pominąć ten dławik.

Spotkałem się też z takimi konfiguracjami:

1. Na Aref i AVcc po kondesatorze 100n do masy.
2. W Twoim projekcie: Sterownik pieca CO jest jeszcze inaczej: zwarte VCC, AVCC i AREF i wszystko do +5V

Czy konfiguracja elementów zew. zależy od tego w jakim układzie pracuje ATmega8?

Czy można przyjąć jakiś jeden obowiązujący schemat?

Czyn niewykorzystane piny Atmega8 moga wisieć w powietrzu?

I pytanie trochę niezwiązane z tematem. Zrobiłem termometr tu jest kod:

$regfile = "m8def.dat"                                      'informuje kompilator o pliku
      'dyrektyw mikrokontrolera
$crystal = 8000000                                          'informuje kompilator
      'o częstotliwości oscylatora
      'taktującego mikrokontroler
 
Config Lcd = 16 * 2                                         'konfiguracja typu wyťwietlacza
      'LCD
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2       'konfiguracja linii
      'mikrokontrolera, do ktˇrych
      'do-?czono wyťwietlacz
      'LCD
 
Config 1wire = Portd.1
Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32          'znak stopnia
Dim T1 As Single
Dim T2 As Single
Dim B1 As Byte , B2 As Byte , R As Byte
Dim Tmp As String * 6
Dim Znak As String * 1
R = &HFF
Declare Sub 1wr                                             'podprogram resetujacy magistrale 1w
Cursor Off
Cls
 
Do
1wr                                                         'podprogram 1wr
1wwrite &HCC                                                'komenda skip ROM
1wwrite &H44                                                'komenda convert T
Waitms 250
Waitms 250
1wr                                                         'podprogram 1wr
1wwrite &HCC                                                'komenda skip ROM
1wwrite &HBE                                                'komenda read
 
B1 = 1wread()                                               'odczyt z termometru
B2 = 1wread()
 
1wr                                                         'podprogram 1wr
 
If B2 >= 248 Then                                           'w przypadku temperatur ujemnych
B1 = R - B1                                                 'Od 255 Odejmujemy B1
B2 = R - B2                                                 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16                                                'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16                                                'przesuniecie w lewo o 4 bajty
T1 = T1 + T2
 
Tmp = Fusing(t1 , " ###.&&")
Cls
Lcd "odczyt z DS18B20"
Lowerline
Lcd "temp:" ; Znak ; Tmp ; Chr(1) ; "C "
 
Waitms 250
Waitms 250
Waitms 250
Waitms 50
Loop
 
Sub 1wr                                                     'podprogram resetujacy magistrale
1wreset
End Sub

Termometr działa ok, w całym zakresie temperatur tylko: (chyba przy odświeżaniu wskazania, co ok. 1 s, przy pobieraniu danych z czujnika) następuje takie miganie(przygasanie, na ułamki sekund) wyświetlacza, czym to może być spowodowane? Program coś nie halo?

Pozdrawiam, Łukasz Winiarski




Portret użytkownika mirley

Re: Pytania m8

Quote:
Czy konfiguracja elementów zew. zależy od tego w jakim układzie pracuje ATmega8?

ja zawsze stosuje jeden schemat, ze zwartymi VCC, AVCC i AREF do zasilania i masy do siebie, często dodaje kondensatory 100nF i 47uF lub podobne blisko procesora filtrujące zasilanie. Narazie nie natknąłem sie na jakieś większe problemy z pracą mikrokontrolera abym musiał dawać dławiki itp dodatkowe elementy, Nawet gdy używam ADC to mam taki sam schemat

Quote:
Czyn niewykorzystane piny Atmega8 moga wisieć w powietrzu?

A co chcialbyś z nimi zrobić? procesor ma uniwersalne wyprowadzenia i zwierania ich gdziekolwiek nie ma sensu. Ja zawsze konfiguruje na początku wszystkie piny a nieużywane wyprowadzenia procesora jako wyjścia i ustawiam na nich stan wysoki. W twoim programie brakuje konfiguracji wyprowadzeń :) czyli czegos takiego:

Config Portb = &B11111000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00011111 : Portd = &B11111111

To normalne że wyświetlacz miga bo kasujesz go co sekundę a nie jest to konieczne, dodatkowo duzo danych naraz na nim chcesz wyświetlać:

Cls
Lcd "odczyt z DS18B20"
Lowerline
Lcd "temp:" ; Znak ; Tmp ; Chr(1) ; "C "

pierwszą część:

Cls
Lcd "odczyt z DS18B20"
Lowerline
Lcd "temp:"

wyrzuć przed petlę główną do loop bo po co to wypisujesz za każdym razem jak sie to nie zmienia:

potem wydasz polecenie Locate, ustawiając kursor w linijce 2 pozycja 7:

 

A zatem spróbuj to tak wpisać w kod:

.......
2 = B2 * 16                                                'przesuniecie w lewo o 4 bajty
T1 = T1 + T2
 
Tmp = Fusing(t1 , " ###.&&")
locate 2, 7
Lcd  Znak ; Tmp ; Chr(1) ; "C    "
 
Waitms 250
........

a na początku oczywiście pozostałe napisy tak aby wykonały się tylko raz

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.