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

BASCOM i ATmega16 - PROBLEM Z WYSYŁANIEM ZNAKÓW DO RS232

TomekMus 14 Lip 2006 14:37 5350 43
  • #1 14 Lip 2006 14:37
    TomekMus
    Poziom 17  

    Mam problem z wysyłaniem i odbieraniem danych przez port RS232. Na płytcie mam układ ATmega16. Program piszę w BASCOM-ie:

    $regfile = "m16def.dat"
    $crystal = 11059200
    $baud = 9600 'lub 19200

    Do
    Print "TEST"
    Loop

    End

    I niestety nie mam efektów. Czy może mi ktoś w tym problemie pomóc?

    PODAJE LINK Z SCHEMATEM MOJEJ PŁYTKI:BASCOM i ATmega16 - PROBLEM Z WYSYŁANIEM ZNAKÓW DO RS232

    0 29
  • Pomocny post
    #2 14 Lip 2006 14:59
    arnoldziq
    Moderator Programowanie

    Powodów tego, że twój układ nie działa mogą być setki :(
    1. Błąd podłączenia PC<->MAX
    2. MAX nie działa
    3. Zamienione TX z RX pomiędzy MAX a uC
    4. Zdefiniuj w BASCOM-ie software-owy port
    ....
    i setki innych ...

    Zacznij od połączenia RX i TX MAX-a po stronie uC i sprawdź czy transmisja wraca do PC.

    0
  • #3 14 Lip 2006 15:34
    TomekMus
    Poziom 17  

    PROŚBA ! ! !

    Jak bym przesłał projekt który jest widoczny na zdjęciu w formacie ProtelDXP to może Pan dla mnie zrobić poprawę komunikacji RS232 i ATmega16 (chodzi mi tu o dokładnie jakie piny z jakimi podłączyć?

    Ewentualnie może Pan napisać:
    Max232 ATmega16
    pin14 z pin1

    a jeśli chodzi o Bascom to musi być to zrobione w ten sposób?:

    $regfile = "m16def.dat"
    $crystal = 10000000
    $baud = 19200

    $hwstack = 32
    $swstack = 10
    $framesize = 40

    Dim B As Byte

    Waitms 100

    Open "comd.1:19200,8,n,1" For Output As #1
    Open "comd.0:19200,8,n,1" For Input As #2

    Print #1 , "TEST"

    Input #2 , B
    Print #1 , B

    Do
    Print #1 , "TEST'
    Loop

    Close #2
    Close #1
    End

    0
  • Pomocny post
    #4 14 Lip 2006 15:50
    arnoldziq
    Moderator Programowanie

    Masz tu prosty, sprawdzony, działający program do sterowania portami.

    Code:
    $regfile = "m16def.dat"
    
    $crystal = 1000000 ' przelicz u siebie te zera :)
    Dim B As Byte
    Config Portb = Output
    Portb = &HFF

    Waitms 100
    Open "comd.1:9600,8,n,1" For Output As #1
    Open "comd.0:9600,8,n,1" For Input As #2

    Do
       B = Inkey(#2)
       If B > 0 Then
       Print #1 , "READY "
       Select Case B
        Case 48 : Toggle Portb.0                                ' "0"
        Case 49 : Toggle Portb.1                                ' "1"
        Case 50 : Toggle Portb.2                                ' "2"
        Case 51 : Toggle Portb.3                                ' "3"
        Case 52 : Toggle Portb.4                                ' "4"
        Case 53 : Toggle Portb.5                                ' "5"
        Case 54 : Toggle Portb.6                                ' "6"
        Case 55 : Toggle Portb.7                                ' "7"
        Case 83 : Print #1 , Bin(portb)                         ' "S"
        Case 115 : Print #1 , Bin(portb)                        ' "s"
        Case Else : Print #1 , "WHAT?"
       End Select
       End If
    Loop
    Close #2                                                    ':)
    Close #1                                                    ':)
    End


    Z połączeniami w protelu ci nie pomogę, bo nie używam protela :)
    Co do podłączenia MAX-a, to tu na tym forum jest z 1000 postów na ten temat, wraz ze schematami i sposobami ich sprawdzania.

    A tu masz jeden z schematów podłączenia MAX-a, co prawda nie do ATMEGA16 , ale to nie problem ... chodzi o ideę.

    0
  • #5 17 Lip 2006 22:33
    TomekMus
    Poziom 17  

    Przetestowałem płytkę w taki sposób że wyjąłem ATmege i połączyłem ze sobą wyjście i wejście które podciągałem do procka(atmegi) i układ działa jak echo, wysyłam z portu COM i dostaje to samo. Więc jaki błąd popełniłem dalej jeżeli chodzi o komunikacje maxa i atmegi????

    0
  • Pomocny post
    #6 17 Lip 2006 23:40
    crazy_phisic
    VIP Zasłużony dla elektroda

    A ustawienia bitów konfiguracyjnych??
    Włączyłeś obsługę zewnętrznego kwarcu??

    0
  • #7 18 Lip 2006 10:47
    TomekMus
    Poziom 17  

    Nie!!! Wszystkie programy piszę w bascomie. Mam w domu książke:
    Programowanie mikrokontrolerów AVR w jężyku BASCOM - Marcin Wiązania

    Tam są przykłady obsługi portu rs232 i nic nie jest napisane o włączeniu kwarcu. Jest tylko krótki listing taki jak napisałem na początki

    $REGFILE = "m16mef.dat"
    $CRYSTAL = 11059200
    $BAUD = 19200

    DO
    PRINT "TEST" i to wszystko
    LOOP
    END

    0
  • Pomocny post
    #8 18 Lip 2006 11:10
    max_gg
    Poziom 26  

    Masz dyrektywę $CRYSTAL=11059200, czyli taki rezonator powinieneś użyć. Dodatkowo powinieneś ustawić odpowiednio FuseBity - do działania z zewnętrznym oscylatorem. Domyślnie działa na wewnętrznym oscylatorze RC z zegarem 1MHz.

    Jeżeli nie chcesz się bawić "fusami", zmień wartość za $Crystal na 1000000 i dodatkowo zmniejsz prędkość działania RS-a ($BAUD=2400 lub 4800 - inne wartości to zbyt duże błędy transmisji)


    Ale, ale - fusami i tak się musisz pobawić, bo domyślnie włączony jest JTAG...

    0
  • #9 18 Lip 2006 14:17
    TomekMus
    Poziom 17  

    Dzięki!!!

    Ale mam pytanie jestem dobry w pisaniu programów, mam już 8-letnie doświadczenie w (DELPHI), potrafie napisać nie jedną dobrą aplikacje ale teraz zaczynam się bawić w obsługe zewnętrznych urządzeń poprzez mikrokontroler.... I nie mam pojęcia co do ustawień fisbitów, jedyne środowisko programowe jakie się poruszam w programowaniu atmegi to BASCOM. I nie wiem jak to zrobić i czy wogóle to idzie zrobić w BASCOMIE. Czy może mi Pan podać jakiś przykład? Ja posiadam kwarc 11.059 z słyszałem że zastosowanie takieog powoduje że będy w trancmisji są 0.00%

    0
  • Pomocny post
    #10 18 Lip 2006 14:35
    arnoldziq
    Moderator Programowanie

    TomekMus napisał:
    Ja posiadam kwarc 11.059 z słyszałem że zastosowanie takieog powoduje że będy w trancmisji są 0.00%


    To nie jest prawda !!!
    Błędy w transmisji będą (prawie) zawsze !!!
    Po prostu, dla konkretnych prędkości transmisji dobiera sie optymalne czestotliwości kwarców. Dla BAUD = 19200 jest to właśnie ten kwarc 11 z kawałkiem.

    Tu jest link do programu który pokazuje ilość błędów w zależności od kwarca i prędkości.

    https://www.elektroda.pl/rtvforum/viewtopic.php?p=2694562#2694562

    0
  • #11 18 Lip 2006 16:20
    TomekMus
    Poziom 17  

    A co mam zrobić z tymu "fusami"???? Czy może mi Pan w jakiś sposób pomóc????

    0
  • Pomocny post
    #12 18 Lip 2006 20:55
    max_gg
    Poziom 26  

    Jeżeli uruchomisz programator BASCOM (F7), to znajdziesz zakładkę "Lock and Fuse bits" - to tam ustawiasz wszystkie Fusebity (i Lockbity - czyli bity zabezpieczające pamięć programu przed odczytem - również).
    Opcje są czytelnie opisane - co prawda po angielsku, ale z tym raczej dasz sobie radę - jedyny błąd, to opcja opisana jako "divide by 16" a powinno być 8. Tą opcję musisz wyłączyć.

    Sam BASCOM ustawi bity odpowiednio po zaprogramowaniu


    Ps.: Nie wiem, czy Koleżanki i Koledzy się ze mną zgodzą, ale osobiście nie lubię jak ktoś pisze "Pan/i" - tu raczej wszyscy jesteśmy jedną "ekipą", a w takich nie ma "Panów"... Nick raczej wystarczy, ew. "kolega"

    Edit: dodaję rysunek (co prawda dotyczy mega8 - ale w mega 16 jest podobnie), zaznaczyłem opcje wyboru oscylatora. Akurat mega8 jest ustawiony w tryb domyślny - ale będziesz wiedział czego szukać

    0
  • #13 19 Lip 2006 09:47
    TomekMus
    Poziom 17  

    Witam ponownie,

    Przesyłam Tobie jak mam moje fusssbity. Mam tam 1MHz a posiadam 11.059MHz i zaznaczyłem jeszcze 3 linijki co nie weim co z nimi zrobić

    0
  • Pomocny post
    #14 19 Lip 2006 12:59
    max_gg
    Poziom 26  

    Fusebits KL zostawiasz bez zmian, A987 ustawiasz na 1111 (z rozwijanej listy wybierasz taką opcję). Dodatkowo ustawiasz bit H: CKOPT na 0 (0 oznacza "włączony") i wyłączasz JTAG w bicie J (JTAG Disable)

    Co do Lockbits - nie zmieniaj, zostaw tak jak są. Wartości które tam masz wpisane umożliwiają odczyt pamięci programu i jej weryfikację

    Pamiętaj, że w przypadku AVR'ów Fusebit i Lockbit ustawiony na "0" oznacza "zaprogramowany/włączony" - niech Cię to nie zmyli

    Pozdrawiam!

    0
  • #15 19 Lip 2006 13:27
    TomekMus
    Poziom 17  

    :cry:

    Mam problem.... przez moją głupote zostawiłem włączony programator....
    WiI jeden z moich synów pod moją nieobecność w zakładce Fuzebit A987 wybrał inną opcję z tego co tłumaczył to że to było coś extendend....... i nadusił sobie write....

    CO MAM TERAZ ZROBIĆ BO NIE WIDZE ATMEGI JAK WŁĄCZAM PROGRAMATOR???? CZY ON MI COŚ USZKODZIŁ????

    0
  • Pomocny post
    #16 19 Lip 2006 13:50
    max_gg
    Poziom 26  

    Jeżeli przestawił tylko to, to nie powinno być problemu...
    Masz dwie możliwości
    1. Włączony został zewnętrzny oscylator RC (External RC Oscillator): wtedy do nóżki XTAL1 podłączasz rezystor i kondensator wg. rys 13/str.26 w karcie katalogowej
    2. Włączony został zegar zewnętrzny (External Clock) - wtedy do nóżki XTAL1 musisz dołączyć zewnętrzny generator (rys.14/str.29). Generator możesz zrobić na jednej bramce Schmitta, lub dwóch zwykłych...

    0
  • #17 19 Lip 2006 14:08
    TomekMus
    Poziom 17  

    Nie wiem czy to coś da bo mam programator Programator ISP AVR STK200/300 i w nim nie mam takij opcji, a podłączenie tego na płytce nic nie da bo nie mam tnterfejsu ISP. Więc czy idzie to odkęcić mając mój programator????? Ja mam tylko ten programator podłączony pod podstawke DIP40 i zasilanie +5V i czy jest możliwość to odkręcić bo jak włączam programator BASCOM to nie wykrywa atmegi?????

    I CO TERAZ MAM ZROBIĆ?????

    Dodano po 1 [minuty]:

    Czy idzie przywucić fabryczne ustawienia????? Globalny RESET???? Czy Atmegi mają coś takiego

    0
  • Pomocny post
    #18 19 Lip 2006 14:28
    max_gg
    Poziom 26  

    Programator da radę, ale wymagana jest interwencja z Twojej strony.

    Musisz do mikrokontrolera - nie programatora - podłączyć generator w sposób podany wyżej.
    I dopiero po tym włączasz programator

    XTAL1 to nóżka nr 13 - jeśli wyciągniesz rezonator (wylutujesz itp.) to możesz podłączyć rezystor 10kOhm między tę nóżkę i VCC, kondensator 33pF powinieneś mieć już wlutowany

    Niestety, AVR-y nie mają takiego RESET-u bez użycia programatora się nie obejdzie (ChipErase). Czyli obojętnie czego byś nie robił - pozostaje albo sposób który podaję, albo programator równoległy (STK500)

    0
  • #19 19 Lip 2006 23:19
    TomekMus
    Poziom 17  

    Podłączyłem programatro pod schemat jaki przedstawiłem na początku forum... jest tam kwarc i łatwiej było mi się podpiąć pod gotową płytkę niż tworzyć nowe dzieło sztuki.... i nic nie udało mi się :(

    Więc już mam taką prośbę czy da rade jak wyśle komuś mój układzik(atmege) i mi ktoś to zresetuje jak czytałem wcześniej na STK500 lub innym sposobem. Jestem gotowy spakować układ i wysłać komuś by go zresetował i włoże zwrotną kopertę z opłaconym znaczkiem by nie było kosztów z waszej strony???????

    0
  • #20 20 Lip 2006 09:53
    TomekMus
    Poziom 17  

    Jeśli ktoś zdecyduje się zresetować mi atmege to podaje e-mail: tm_skylan(malpa)op.pl
    Tam proszę o bezpośredni kontakt.

    0
  • #21 01 Sie 2006 12:43
    TomekMus
    Poziom 17  

    [size=24]Mam pytanie czy JTAG możę zresetować moje fusbity?????[/size]

    0
  • Pomocny post
    #22 01 Sie 2006 22:20
    max_gg
    Poziom 26  

    Witam ponownie!

    Odpowiedź jest zależna od tego, czy JTAG jest włączony... Jeżeli tak, to problemu nie ma - jest jednak możliwość, że został przestawiony bit odpowiedzialny za ten interfejs.

    Nie obiecuję, ale jestem w trakcie "tworzenia" kopii STK500 - jeżeli da się to uruchomić, to będę mógł więcej pomóc...

    Pozdrawiam!

    0
  • Pomocny post
    #23 20 Sie 2006 08:26
    romantv
    Poziom 17  

    a to program

    Dodano po 11 [minuty]:

    Mam problem z załącznikiem może teraz.:)

    Dodano po 6 [minuty]:

    plik się nie dodaje ??

    wyślę tak :


    $regfile = "m8def.dat"

    $crystal = 11059200


    '$baud = 9600
    '$baud = 19200
    $baud = 38400

    Echo On

    '******** KONFIGURACJA WYŚWIETLACZA LCD *********************************************************************

    Config Lcd = 20 * 4 ' Deklaracja wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Initlcd ' Inicjalizacja wyświetlacza LCD
    Cls ' Czyszczenie
    Cursor Off
    Cursor Noblink


    Config Com1 = , Synchrone = 0 , Parity = Odd , Stopbits = 1 , Databits = 8

    'Parity = Odd ,

    '******* Ustawienie portów ********************************************************************************



    'sterowanie wysyłaniem - kod BCD
    Config Pind.4 = Input
    Config Pind.5 = Input
    Config Pind.6 = Input
    Config Pind.7 = Input

    'sygnalizacja LED
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output

    'przypisanie nazw portom

    P1 Alias Pind.4
    P2 Alias Pind.5
    P3 Alias Pind.6
    P4 Alias Pind.7

    'podłączenie rezystora do wej.
    Set Portd.4
    Set Portd.5
    Set Portd.6
    Set Portd.7


    ' ustawienie początkowe wyj.
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1


    Led 1 Alias Portb.0
    Led 2 Alias Portb.1
    Led 3 Alias Portb.2
    Led 4 Alias Portb.3

    ' deklaracja zmiennych

    Dim A As Integer
    Dim Kod As String * 8

    ' program





    Cls
    Locate 1 , 1 : Lcd "b..38400,ODD,8,1"
    Locate 2 , 1 : Lcd "Test DSK AG-MX70"



    ' ==========================================================================

    Do
    Debounce P1 , 0 , Pr1 , Sub
    Debounce P2 , 0 , Pr2 , Sub
    Debounce P3 , 0 , Pr3 , Sub
    Debounce P4 , 0 , Pr4 , Sub

    If Ischarwaiting() <> 0 Then

    Kod = ""

    Input Kod
    Cls
    Locate 4 , 1
    Lcd Kod
    End If

    Loop

    Pr1:
    Toggle Led 1
    'Locate 1 , 1 : Lcd "Fader "
    Locate 2 , 1 : Lcd " .! "
    Print " .!"
    Waitms 200
    Toggle Led 1
    'Gosub Pr110
    Return


    Pr2:
    Toggle Led 2
    'Locate 1 , 1 : Lcd "Back Color "
    Locate 2 , 1 : Lcd "!..4 "
    Print "!..4"
    Waitms 200
    Toggle Led 2
    'Gosub Pr110
    Return

    Pr3:

    Toggle Led 3
    'Locate 1 , 1 : Lcd "Effects "
    Locate 2 , 1 : Lcd "VEE:AVEN Effects"
    Print "VEE:AVEN"
    Waitms 200
    Toggle Led 3
    'Gosub Pr110
    Return

    Pr4:

    Toggle Led 4
    'Locate 1 , 1 : Lcd "Center "
    Locate 2 , 1 : Lcd "VPC:N "
    Print "VPC:N"
    Waitms 200
    Toggle Led 4
    Portb.0 = 1
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    'Gosub Pr330
    Return
    End

    Dodano po 4 [minuty]:

    CO DO PROGRAMATORA TO USTAW ZEWNĘTRZNY KWARC !!! Widzę że pytałeś o to .


    1111:1111 external XTAL

    i będzie prawidłowo!!!!!

    0
  • #24 20 Sie 2006 15:55
    TomekMus
    Poziom 17  

    JAK ZROBIĆ BRAMKI/????? ABY ODBLOKOWAĆ ATMEGE???? Czy ma ktoś jakieś schematy

    0
  • Pomocny post
    #25 20 Sie 2006 22:02
    romantv
    Poziom 17  

    Nie kumam o jakie bramki Ci chodzi.
    Jeśli kość została zablokowana przed odczytem (kopiowaniem) to nic nie zrobisz jedynie przeczytasz kod 16-wy,a i nie zawsz.

    Opisz dokładniej o co Ci chodzi. a może masz problem z programatorem i pisze że nie widzi uC ?? czekam.

    0
  • #26 21 Sie 2006 09:36
    TomekMus
    Poziom 17  

    Witam, zablokowałem uC poprzez przestawienie fusbit. Niżej przedstawiam Tobie jakie dostałem podpowiedzi od chłopaków na forum. Wykonałem już punkt 1 i nic. Teraz chcę zrobić punkt 2 ale nie wiem jak zrobić domowymi metodami bramki opisane w tym punkcie.

    Jeżeli przestawił tylko to, to nie powinno być problemu...
    Masz dwie możliwości
    1. Włączony został zewnętrzny oscylator RC (External RC Oscillator): wtedy do nóżki XTAL1 podłączasz rezystor i kondensator wg. rys 13/str.26 w karcie katalogowej
    2. Włączony został zegar zewnętrzny (External Clock) - wtedy do nóżki XTAL1 musisz dołączyć zewnętrzny generator (rys.14/str.29). Generator możesz zrobić na jednej bramce Schmitta, lub dwóch zwykłych...

    0
  • Pomocny post
    #27 21 Sie 2006 19:18
    romantv
    Poziom 17  

    Rozumien schematu nie mam i rysunku. jednak domyślam się o co chodzi.
    Chdzi o zbudowanie generatora na bramkach. Jest to prosty układ ale ja bym tego nie robił.
    ( PS. Podeślij schemat to ci go obiaśnię)

    Pewnie lenistwo :( !

    ATmego nie jest droga i postaraj się i nawą, napiszę ci czego nie rób!
    a pozatym szalej na niej ! ile wejdzie. Ja jak programuje kości i zaczynam nowy projekt to czasami nawet programuje klocka z 300 razy.

    nie włączaj :

    Write FS, Write FSH , Write PRG.



    jak ustawisz kwarc na :

    1111:1111 external XTAL

    to włącz Write LB WSZYSTKO.


    POZDRAWIAM PA

    0
  • #28 08 Wrz 2006 09:35
    TomekMus
    Poziom 17  

    Mam jeszcze jedno pytanie czy jak do schematu który jest widoczny u góry mogę podłączycz pod ATmege kostke z wyprowadzeniem ISP. Chodzi mo o to czy jak będe programował ATmege która jest podłączona do kwarcu tak jak na rysunku u góry to po włączeniu zewnętrznego generatora nie zablokuje ATmegi???? Czyli ustawiam fusbity na zewnętrzny kwarc i programuje ATmege a ona nie blokuje się bo jest podłączona do kwarcu. CZY TO ZADZIAŁA?????

    0
  • Pomocny post
    #29 08 Wrz 2006 09:53
    crazy_phisic
    VIP Zasłużony dla elektroda

    Niczego nie zablokujesz ponieważ domyślnie nowy (prosto ze sklepu) procesor pracuje na wewnętrznym zegarze i "nie interesuje" go co jest podłączone do wejść zegarowych. Dopiero przestawiając bity konfiguracyjne przełączasz sygnał zegarowy.
    Tutaj screen z ustawień w Bascomie:
    https://www.elektroda.pl/rtvforum/viewtopic.php?t=573231&highlight=

    PS. romantv nie wprowadzaj w błąd
    "jak ustawisz kwarc na :
    1111:1111 external XTAL
    to włącz Write LB WSZYSTKO.
    "
    LB to lock-bits i nie maja nic wspólnego z konfiguracją

    0
  Szukaj w 5mln produktów