Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8 <=> pc] na wewnętrznym oscylatorze

ariel440 25 Jan 2007 23:39 2678 17
  • #1
    ariel440
    Level 10  
    Witam.
    Od niedawna zacząłem interesować się mikrokontrolerami,
    konkretnie avr. Zafundowałem sobie atmega8 i udało mi się
    zapanować nad jego portami i pinami. Teraz przyszła mi ochota na
    komunikacje atmega8 z pc. Na wszystkich schematach jakie znalazłem
    w sieci (atmega8 <=> rs232) zastosowany jest zewnętrzny
    rezonator kwarcowy z dwoma kondensatorami.
    Moje pytanie brzmi : czy taka komunikacja jest możliwa
    z wykorzystaniem wewnętrzego oscylatora (1MHz) ?
    Narazie nie chcę nic przestawiać na tych fuse bitach,
    szkoda by mi było go zablokować w przypadku złych ustawień.
  • #2
    mieciomiecio
    Level 12  
    Oczywiście że możesz ja używam do komunikacji wewnętrznego (8MHz atmega8535). Nie ma znaczenia jakiej prędkości oscylator weźmiesz jednak musisz pamiętać o tym że nie koniecznie wszystkie prędkości wyciągniesz na USART.
  • #3
    kamyczek
    Level 38  
    Wewnętrzny oscylator rc pozwala na ustawienie z dokładnością nie gorszą od 1% należy podczas startu programu wpisać odpowiednią wartość do rejestru odpowiedzialnego za kalibrację oscylatora rc wielkość ta jest podczas produkcji zapisywana w procesorze i można ja odczytać istnieje spore prawdopodobieństwo że nawet nie wpisując nic do rejestru uda nam sie wysłać i odczytać wartości z rs 232 mogą jednak występować błędy uniemożliwiające prawidłowe działanie układu . Wszelkie informacje zawarte są w dokumentacji procesorów na stronie producenta www.atmel.com
  • #4
    _Matik_
    Level 19  
    Zdarza sie ze ta wartosc podana przez producenta ktora sie wpisuje do rejestru OSCCAL, jest z d*** wzieta :>. Niestety w jednym urzadzeniu (dodatkowo uzywajacym UARTA) zaufalismy oscylatorowi wewnetrznemu (zabraklo wolnych pinow do obslugi kwarca) i teraz przy kazdym wyprodukowanym urzadzeniu chwytam za miernik i kalibruje czestotliwosc. Bardzo nieprzyjemna robota na dluzsza mete.
  • #5
    pablo_banita
    Level 12  
    Witam !

    Ja jestem świeżo po testach z wew. oscylatorem i powiem tak :

    1.atmega8 baud=9600 crystal=8000000(8M) i wszystko było okej... przez dziesięć minut potem zamiast wysyłanych znaków w PC miałem krzaki.

    2.przestawiłem baud=2400 crystal=1000000(1M) i działa ale.... program przyspieszył kilka razy.

    I tu mam pytanie do ludzi siedzących w temacie czy obniżenie częstotliwości zwiększa szybkość :?: (to nie pierwszy taki przypadek):!:
  • #6
    ryborz
    Level 23  
    Jak programujesz w bascomie możliwe jest takie zachowanie jak są rozbieżności między zdefiniowanym: "$crystal =", a rzeczywistym rezonatorem z jakim pracuje układ.
  • #7
    pablo_banita
    Level 12  
    Dzięki za odp. nie napisałem oczywiście mówię o bascom AVR.
    Ale coś mi tu nie pasuje atmega8-16p... czyli oscylator no właśnie? mogę sobie ustawić dowolnie do 16Mhz czy tylko 16Mhz? Miałem wrażenie że można to ustawić dowolnie a może się mylę :?:

    A o tym że wew. oscylator jest nie dokładny to wiem ale że jego dokładność zmienia się losowo po 10 minutach to nie wiedziałem :!:
  • #8
    ryborz
    Level 23  
    Jak się po 10 min. nagrzeje to może sie zmienić z temperaturą:)
    Można chyba w Atmega8 ustawić 1, 2, 4, 8 MHz wew. oscylator.
  • #9
    M. S.
    Level 34  
    Moja Mega8 na wewnętrznym 8MHz gada przez UART ze wszystkim - PC, komórka na 19200, GPS na 4800. Do ustalenia czy transmisja będzie poprawna można skorzystać z wyliczeń w opcjach Bascoma, lub z programu kalkulatora AVR.
  • #10
    pablo_banita
    Level 12  
    ryborz wrote:

    Można chyba w Atmega8 ustawić 1, 2, 4, 8 MHz wew. oscylator.

    Z dokumentacji wynika :
    Quote:

    Speed Grades
    – 0 - 8 MHz (ATmega8L)
    – 0 - 16 MHz (ATmega8)

    Ja mam tą wersje szybszą a więc do 16 i nie znalazłem nic co mówi o tym że co 2Mhz.
    Quote:
    Moja Mega8 na wewnętrznym 8MHz gada przez UART ze wszystkim - PC, komórka na 19200, GPS na 4800. Do ustalenia czy transmisja będzie poprawna można skorzystać z wyliczeń w opcjach Bascoma, lub z programu kalkulatora AVR.

    A moja NIE :cry: - może jakaś felerna albo kable zbyt długie. Obliczenia w opcjach bascoma pokazują że ok - błędy takie same jak dla ustawień
    baud=2400 crystal=1000000(1M). Trzeba to zbadać.
    Mnie bardziej interesuje dlaczego po obniżeniu prędkości wew. oscylatora wzrasta prędkość wykonywania programu i to o kilka razy.
  • #11
    mirekk36
    Level 42  
    Quote:
    dlaczego po obniżeniu prędkości wew. oscylatora wzrasta prędkość wykonywania programu i to o kilka razy


    a mnie się wydaje, że ci się wydaje, że wzrasta ... być może coś źle robisz albo źle programujesz fuse bity niestety. Więc postaraj się doszukać gdzie popełniasz błąd - zaprogramuj fuse bity - CKSEL0..3 i potem je odczytaj czy się zgadza z tym co zaprogramowałeś.

    Bo gdyby program jak piszesz przyśpieszał swoje działanie przy coraz niższym oscylatorze to by znaczyło, że najszybciej działa podczas gdy ma ustawioną minimalną wartość - a sam chyba czujesz, że to niemożliwe

    pozdrawiam
  • #13
    ryborz
    Level 23  
    pablo_banita to co podałeś to są zakresy częstotliwości z jakimi może pracować Atmega8, natomiast wbudowany oscylator (Internal calibrated RC oscillator) można ustawić na częstotliwości takie jak podałem. Strona 30 w dokumentacji.

    CKSEL3..0 | NOMINAL FREQENCY MHz
    0001 | 1
    0010 | 2
    0011 | 4
    0100 | 8

    Od strony 275 zaczynają się charakterystyki wpływu temp. i zasilania na wew. oscylator.
    Od strony 159 zaczynają się tabele prędkości, oscylatora i błędów transmisji.

    http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf
  • #14
    pablo_banita
    Level 12  
    Quote:
    a mnie się wydaje, że ci się wydaje, że wzrasta ... być może coś źle robisz albo źle programujesz fuse bity niestety.

    UPSSSS i tu pewnie masz rację bo tak :
    Bawię się Baskomem i CO MI NIKT NIE POWIEDZIAŁ że muszę się zabrać za fusebity do zmieniania wew. oscylatora? Ja sobie myślałem (tu pewnie śmiech kolegów) że do zmiany wew oscylatora wystarczy polecenie $crystal = .... i tyle tylko zmieniam ale jak zmieniam to jest jak wyżej pisałem różnica tylko że właśnie dziwna a zatem pewnie się muszę jeszcze sporo oczytać na ten temat.
    Quote:
    Nieśmiało zapytam. A konwerter napięć (np. MAX232) jest?

    No to już akurat wiem - czyli jest !
    Quote:
    pablo_banita to co podałeś to są zakresy częstotliwości z jakimi może pracować Atmega8, natomiast wbudowany oscylator (Internal calibrated RC oscillator) można ustawić na częstotliwości takie jak podałem. Strona 30 w dokumentacji

    zwracam honor ale ja do tej pory miałem dokument który miał tylko 28 stron :D ups ups ups.
    A czy ktoś mi tak na prędce napisze jak w bascomie to "CKSEL3..0" wcielić - gdzie to mam wpisać i jak?
    Nasuwa się tu jeszcze jedno pytanie: skoro nie ustawiałem nic poza $crystal to jaka jest nominalna częstotliwość pracy czy dobrze wyczytałem że jest to 1Mhz? (i wtedy wszystko a w zasadzie nic się nie zgadza - jak ustawiam $crystal=1Mhz to transmisja RS jest ok.)

    No i poczytałem, posprawdzałem, potestowałem i mieliście rację - rzeczywiście cieniutki jeszcze jestem w uC :| (choć bawię sie nimi dopiero miesiąc) dzięki za sprowadzenie na ...
    Ziemię

    Ps. ostatnio zbudowałem sobie preamp na atmedze i 3szt. tda sterowanych po i2c - jak że ja się cieszę że wszystko przebiegło bezproblemowo pomimo mojej jeszcze (delikatnie mówiąc) skromnej wiedzy.
  • #15
    ryborz
    Level 23  
    Standardowo są chyba ustawiane na 1MHz. Jak w bascomie dasz program to masz zakładki: FlashROM, EEPROM i Lock & Fuse Bits.
    Dajesz tą ostatnią zakładkę i tam jest wczytywana konfiguracja z atmegi.
    Dajesz zakładkę z cksel i masz rozwijane menu i opcje do wyboru. Przestawiasz i dajesz write FUSE Bits czy coś w tym stylu:) nie mam podłączonego to Ci nie powiem :) Na pewno się zorientujesz.
    Musisz uważać, żeby nie dać zewnętrznego zegara, bo jak go nie ma na płytce to procek nie ruszy i już go bez zegara przez isp nie zaprogramujesz!
  • #16
    pablo_banita
    Level 12  
    ryborz wrote:
    Standardowo są chyba ustawiane na 1MHz. Jak w bascomie dasz program to masz zakładki: FlashROM, EEPROM i Lock & Fuse Bits.

    Tak jest już na to wpadłem z tym że aby to zobaczyć trzeba wyłączyć opcje auto flash w meni options->programmer. Faktycznie działa zmieniłem fusebit A987 na 0100:0100 i śmiga aż miło ale miałem stresa coby nic nie zepsuć :D
    A tak na przyszłość co zmienić coby podłączyć zewnetrzny kwarc 8Mhz (chodzi mi o same fusebity)
  • #17
    ryborz
    Level 23  
    Wszystko jest w dokumentacji.
    CKOPT 1 CKSEL 111 3-8MHz
    Str. 27