logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATiny2313 i RS232 - brak transmisji, jak poprawnie skonfigurować USART?

bartek_zet 10 Lip 2006 11:08 2757 28
REKLAMA
  • #1 2806766
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Witam.
    Proszę nie piszcie, że temat był już omawiany, bo przeczytałem chyba wszystko na tym forum o RS232 i nic mi nie pomogło.

    Pierwszy raz zabrałem się za obsługę RS232 i potrzebuję kompletnych informacji bo błędów pewnie mam od pierona:)

    Chciałbym stworzyć układ który po prostu wyśle mi do terminala znak (aby poznać jak to wszystko działa).

    Moje dotychczasowe osiągnięcia:
    1. Procesor ATiny2313 i 2 procedury z pdf'a. Zegar jest ustawiony na wewnętrzny 4MHz (nic nie zmieniałem a to jest domyślne). Taki program mam napisany:
    .include "tn2313def.inc"
    .def temp = R16
    	
    	ldi temp,Low(RAMEND<<1)		;ustawienie stosu
    	out SPL,temp
    	
    	ldi R17,$00
    	ldi R16,$67
    	rcall USART_init
    skok:
    	ldi R16,$61
    	rcall USART_transmit
    
    
    	rjmp skok
    
    
    
    USART_init:		;parametr w R17:R16
    	out UBRRH,R17	;preskaler
    	out UBRRL,R16	
    	ldi R16,(1<<RXEN)|(1<<TXEN)		;enable receiver and transmitter
    	out UCSRB,R16					
    	ldi R16,(1<<USBS)|(3<<UCSZ0)	;8bit data i 2bit stop
    	out UCSRC,R16					
    	ret
    
    USART_transmit:		;parametr (dana) w R16
    	sbis UCSRA,UDRE		;czekaj na opróżnienie bufora	
    	rjmp USART_transmit	
    	out UDR,R16			;wyślij daną
    	ret
    


    Chciałem, żeby program wysyłał ciągle AAAAAAAAAAAAAAAAAA, ale tego nie robi niestety. (W AVRSTUDIO na symulacji wysyła 2 razy do UDA po czym kasuje UDRE i skacze w nieskończoność do USART_transmit).

    2. Kabel mam taki jak na obrazku poniżej

    ATiny2313 i RS232 - brak transmisji, jak poprawnie skonfigurować USART?

    Próbowałem również z połączeniem bez przeplotu.

    3. Używam MAX233. Podłączyłem tak jak na pdf'ie (bez kondensatorów, tylko 3 zapętlenia).

    4. Mam Windows XP. Hiperterminal poustawiałem tylko nie wiem do czego mu numer kierunkowy itp :|

    Z góry dziękuję za pomoc.
  • REKLAMA
  • Pomocny post
    #2 2807975
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    
    .include "tn2313def.inc" 
    .def temp = R16 
    .cseg
    
    .org 0x00
    	RJMP	poczatek
    
    
    poczatek:	
    	LDI		temp,LOW(RAMEND)						;ustawienie stosu 
    	OUT		SPL,temp 
    	LDI		temp,0x67								; 2400 @ 4 MHz przy bledzie 0.16% (dopuszczalny)
    	OUT		UBRR,temp
    	LDI		temp, (1<<TXEN)|(1<<RXEN)				;wlaczenie rs 
    	OUT		UCR, temp 
    	
    	LDI		temp,0x61 
    	RCALL	USART_transmit 
    
    petla:
    	RJMP	petla
    
    
    USART_transmit:										;parametr (dana) w R16  
    	SBIS		USR , UDRE 
    	RJMP		USART_transmit 
    	OUT			UDR , temp   
    RET
    
    


    troche zmodernizowalem twoj kod jak bedziesz mial watpliwosci to pisz
  • #3 2808220
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    No skompilowałem kod od Ciebie ale dalej nic się nie dzieje.
    Możesz poradzić coś na pozostałe pytania na górze?
  • Pomocny post
    #4 2808301
    johny_w
    Poziom 24  
    Posty: 673
    Pomógł: 80
    Ocena: 63
    A może coś nie tak ze sprzętem? Dołącz schemat układu. Może problem tkwi w połączeniu procka z max232 (domniemam iż tego układu użyłeś do konwersji). Napisz też jak dokładnie ustawiłeś port w ht. Nr. kierunkowy używany jest jeśli używasz połączenia przez modem. Po wybraniu połączenia przez COM opcja ta staje się nieaktywna. Ja osobiście nigdy nie miałem problemów z uartem na żadnym z procków avr.
  • #5 2808426
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    pierwsza rzecz to nie uzywaj oscylatora wewnetrznego (jest niestabilny) uzyj kwarca. wlasnie przeanalizowalem ten twoj kod im wyglada nato ze powinien dzialac. niesprawdzalem tylko szybkosci transmisji zakladam ze wiesz co robisz. proponuje zaczac od sprawdzenia calego ukladu wlacznie z max'em i doboru odpowiedniej predkosci transmisji. jak dalej bedziesz mial problem pisz gg 5332441
  • Pomocny post
    #6 2808605
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Jak po mojemu to żły jest kabel linie RxD i TxD powinny być na przemian: pin 2 do pin 3 i pin 3 do pin 2.
    Poza tym sprawdziłbym poprzez Teminal i zworę we wtyczce czy to, co wysyłam dochodzi z powrotem. Następnie zrobiłbym to samo z liniami za max tuż przy procesorze. Zrobił zworę i sprawdził po jak powyżej. Jeśli do tego momętu jest wszystko ok to martwiłbym się o software i pozostawił hardware w spokoju.
  • REKLAMA
  • #7 2809241
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    roiman napisał:
    pierwsza rzecz to nie uzywaj oscylatora wewnetrznego (jest niestabilny) uzyj kwarca


    Tak też myślałem i poczyniłem pewne kroki. Niestety przez nieuwagę ustawiłem fusy na generator zewnętrzny i teraz muszę skombinować taki generator żeby ruszyło cokolwiek :D. Spróbuję podłączyć jako generator sygnał z XTAL2 z innego projektu.
  • #8 2809494
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    dodaje kabelek null modem to polaczenie zawsze dziala
    Załączniki:
    • ATiny2313 i RS232 - brak transmisji, jak poprawnie skonfigurować USART? KABEL.JPG (8.77 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #9 2809588
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    roiman napisał:
    dodaje kabelek null modem to polaczenie zawsze dziala


    Dzięki. Tak więc kabel mam dobry:). Zaraz sprawdzę czy będzie działać na rezonatorze.

    Mam jeszcze takie pytanie.
    Jeżeli HiperTerminal nie odbiera mi kompletnie nic to powinienem raczej szukać przyczyny gdzie indziej niż w taktowaniu procka? Mam programowo ustawioną transmisję 2400, 8bit danych, bez parzystości i 1 stop. Te same ustawienia w HiperTerminalu. Nie wiem tylko jak ustawić sterowanie przepływem (ale sprawdzałem dla każdej opcji i dla żadnej nie chodzi:()
  • #10 2809594
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    na twoim rysunku kabla niema polaczonych pinow 4z6 i 7z8 proponuje abys polaczyl
  • #11 2809601
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    roiman napisał:
    na twoim rysunku kabla niema polaczonych pinow 4z6 i 7z8 proponuje abys polaczyl


    Sorry rysunek zły wysłałem:) Mam te piny połączone tylko, że do 4z6 mam jeszcze podpięty 1 (taki schemat był u dolińskiego w książce tylko u niego znów kabel był niby null-modem a przeplotu nie było).
  • Pomocny post
    #12 2809957
    rezi_ar
    Poziom 17  
    Posty: 166
    Pomógł: 21
    Ocena: 9
    A może by tak zacząć od sprawdzenia czy na Tx procka coś się "dzieje"?
    Jeżeli nie masz oscyloskopu, to przez dzielnik 1:10 nagraj przez wejście karty muzycznej i pooglądaj w dowolnym edytorze wav'ów.
    Jeżeli tam będzie ok, to dalej sprawdź wyjście z max232 (dzielnik 1:50 - 1:100) powinien być identyczny przebieg, ale odwrócony (tam gdzie wcześniej był górka, teraz dołek...)
  • #13 2811303
    johny_w
    Poziom 24  
    Posty: 673
    Pomógł: 80
    Ocena: 63
    A po co w ogól te zwory 4-6 i 7-8? Ja stosuję zawsze 8bitów, bez parzystości, 1 stop, bez przepływu i połączenie wygląda następująco: od uC do Maxa linie proste, a kabel od maxa do Pc krosowany. I zawsze działa. Od Tiny2313 do Mega128. A kolega dalej nie przedstawił schematu. Pozdrawiam...
  • #14 2812176
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 160
    O co chodzi z tym:
    3. Używam MAX233. Podłączyłem tak jak na pdf'ie (bez kondensatorów, tylko 3 zapętlenia).
    Czyli na wyjściu uarta w strone komputera brak napięcia ujemnego? Kondensatory są do przetwornicy napiecia. Bez nich na pewno nic nie bedzie działać.
    Pozdr. N.
  • #15 2812372
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Nawigator napisał:

    Czyli na wyjściu uarta w strone komputera brak napięcia ujemnego? Kondensatory są do przetwornicy napiecia. Bez nich na pewno nic nie bedzie działać.


    MAX233 nie potrzebuje kondensatorów. Napięcie -10,5V mam.
    Schemat zamieszczę wieczorem.
  • #16 2813016
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    tu masz 3 hexy wysylaja przez rs 10101010 na 3 rozne kwarce rozszezenia txt zamien na hex oczywiscie na tiny2313
    Załączniki:
    • kwarc_3_6864_2400.txt (394 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
    • kwarc_7_3728_2400.txt (394 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
    • kwarc_1_8432_2400.txt (394 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #17 2814163
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    A mogę prosić o kwarc 11,0592 ??? :)
  • REKLAMA
  • #18 2814330
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    masz na 11,0592 2400b/s
    i drugi wysyla co 1 sekunde 10101010 (0xAA)

    niewiem czy uzywasz jakis innych jezykow czasem warto jak program jest bardzo prosty to uzywam darmowej wersji bascom avr (basic)jak bardziej rozbudowany CodeVision (ansi c), jak zalezy mi na czasie wykonywanych operacji to asemblera.
    Załączniki:
    • kwarc11_0592_2400_co1s.txt (529 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
    • kwarc11_0592_2400.txt (394 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #19 2816057
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    W dalszym ciągu nic mi nie działa:( Przesyłam schemat w załączniku, pewnie tam jest jakiś błąd. Opiszcie mi również proszę krok po kroku co należy zrobić w Hiperterminalu, żeby zainicjować połączenie i odebrać coś od AVRa.
    Załączniki:
    • ATiny2313 i RS232 - brak transmisji, jak poprawnie skonfigurować USART? schemat.jpg (224.78 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #20 2816647
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    wszystko wyglada ok moze odlacz ta 1 ja zawsze zostawiam ja niepodlaczona
  • #21 2816675
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Mam pytanie w sprawie kabla.
    Numeracja pinów na wtyczkach które kupiłem jest odbiciem lustrzanym numeracji na gnieździe w mojej płytce. Przelutowałem kabel jeszcze raz ale to i tak nie pomogło. Kabel mam skrosowany. Mogę go łączyć obojętnie które końce do kompa a które do płytki???
  • REKLAMA
  • #22 2816772
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Proponował bym sprawdzić tego MAX'a
    Wymuś na pinie 2 stan wysoki i zobacz jak będzie się zachowywał pin 5 powinno tam być +12V (jeśli podłącz masę to powinno być -12V). Następnie zepnij 4 z 5 i zobacz czy wymuszenie stanu wysokiego na 2 daje jakieś zmiany na 3.
    Nie pisałeś czy zwora 2 z 3 we wtyczce daje jakiś efekt na terminalu.
  • #23 2816778
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Samuraj napisał:
    Nie pisałeś czy zwora 2 z 3 we wtyczce daje jakiś efekt na terminalu.


    Nie daje żadnego efektu.
  • #24 2816783
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    To nie szukaj problemu w mikrokontrolerze tylko w systemie albo w konfiguracji terminala.
    Postępuje tak aby wykluczać poszczególne elementy a nie podchodząc do problemu całościowo.
  • #25 2816802
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Samuraj napisał:
    To nie szukaj problemu w mikrokontrolerze tylko w systemie albo w konfiguracji terminala.


    A mógłbyś napisać coś więcej o tym?? Co dokładnie sprawdzic i ustawić?
  • Pomocny post
    #26 2816879
    adasb
    Poziom 14  
    Posty: 150
    Pomógł: 2
    Ocena: 4
    Ja aktualnie też się bawie UART-em w ATtiny 2313.
    Schemat kabla masz identyczny jak u mnie.
    Wysyłam dane 8 bitowe z 1 bitem stopu i bez bitu parzystości przy predkości 9600 na kwarcu zewnetrznym 8 MHz- czyli taka konfiguracja jaka jest przy odpalaniu terminala. Układ wysyła mi cały czas znak AAAAAAAAAAAAAA - czyli chyba to co chciałeś otrzymać. Konfiguracja terminala u mnie wygląda nastepująco: Port COM2, predkosc 9600, 8 bitów, brak parzytości, bity stopu 1 , bufor wejsciowy 4096, bufor wyjsciowy 2048, kontrola transmisji brak.
    Poniżej masz cały program jaki ja używam i działa. Teraz aktualnie mam problem : chce wysłać obojętnie jaki znak z terminala i żeby mikrokontroler wysłał mi jako potwierdzenie znak ' A' spowrotem do kompa.

    .cseg 0000h
    rjmp INIT
    INIT:
    .equ UBRR=$09
    .equ UCR=$0A
    .equ UDR=$0C
    .equ USR=$0B
    .equ UDRE=5
    .equ RXEN=4
    .equ SPL=$3D

    ldi r16,$DF ;ustawienie stosu
    out SPL,r16

    ldi R16,51
    out UBRR,R16 ;WPISANIE WARTOŚCI SET BAUD RATE 9600
    sbi UCR,RXEN ;odblokowanie nadajnika
    wait:
    rjmp wait

    transmition:
    sbis USR,UDRE
    rjmp transmition
    out UDR,R16
    rjmp transmition

    Dodano po 5 [minuty]:

    sorki mała pomyłka- tu masz jeszcze raz cały programik:

    cseg 0000h
    rjmp INIT
    INIT:
    .equ UBRR=$09
    .equ UCR=$0A
    .equ UDR=$0C
    .equ USR=$0B
    .equ UDRE=5
    .equ RXEN=4
    .equ SPL=$3D

    ldi r16,$DF ;ustawienie stosu
    out SPL,r16
    ldi R16,51
    out UBRR,R16 ;WPISANIE WARTOŚCI SET BAUD RATE 9600
    sbi UCR,RXEN ;odblokowanie nadajnika
    ldi r16,65
    rjmp transmition

    wait:
    rjmp wait

    ;----------------wejscie do procedury transmisji-----------------
    transmition:
    sbis USR,UDRE
    rjmp transmition
    out UDR,R16
    rjmp transmition
  • #27 2818736
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Ok. Transmisja mniej więcej działa - miałem błędy w połączeniach przy gnieździe DB9.

    Działa mniej więcej ponieważ jedyny działający program to HEX od ROIMANa który co sekundę wysyła mi 3x znak o kodzie C0 :|
    Ani moje programy, ani ten od ADASB nie chodzą. Parametry transmisji za każdym razem dostosowywałem do swojego kwarcu a później przełączyłem się na 8MHz wewnętrzne i taki sam efekt. ?????????
  • #28 2818830
    roiman
    Poziom 14  
    Posty: 88
    Pomógł: 7
    Ocena: 2
    ciekaw jestem czemu tobie ten program wysyla az 3x to samo w zasadzie nigdy jeszcze tego procesorka nieuzywalem, ale z zadnym innym takie cos mi sie jeszcze nie zdarzylo proponuje abys sobie pobral bascom avr i w nim na poczatek napisal rs. Jesli bedzie ci wszystko dzialac to mozesz hexa z bascoma zdisasemblowac w avrstudio i wszystkie ustawienia masz na tacy.
  • #29 2819096
    bartek_zet
    Poziom 17  
    Posty: 311
    Pomógł: 15
    Ocena: 8
    Problem rozwiązany. Miałem błędy w połączeniach przy gnieździe DB9. Teraz działa i wysyłanie i odbieranie.

    Dzięki wszystkim za pomoc.
    Zamykam temat.

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z transmisją RS232 przy użyciu mikrokontrolera ATtiny2313 i konfiguracji USART. Autor korzysta z wewnętrznego oscylatora 4 MHz i próbuje wysłać pojedynczy znak do terminala, jednak transmisja nie działa. Wskazano na konieczność poprawnej konfiguracji rejestrów UBRR, UCSRB oraz sprawdzenia sprzętowego połączenia między mikrokontrolerem a konwerterem MAX232/MAX233, w tym prawidłowego okablowania (linia RxD do TxD i odwrotnie) oraz obecności kondensatorów przy MAX232 (MAX233 ich nie wymaga). Zwrócono uwagę na stabilność taktowania – zalecane jest użycie zewnętrznego kwarcu zamiast oscylatora wewnętrznego. Rekomendowano testowanie sygnału Tx mikrokontrolera oscyloskopem lub kartą dźwiękową z dzielnikiem napięcia. Wskazano także na poprawne ustawienia terminala (np. HiperTerminal) – prędkość transmisji, 8 bitów danych, brak parzystości, 1 bit stopu, brak kontroli przepływu. Po poprawieniu połączeń przy złączu DB9 transmisja zaczęła działać poprawnie. W dyskusji pojawiły się przykładowe kody asemblerowe i sugestie użycia narzędzi takich jak Bascom AVR lub CodeVision do testów. Ostatecznie problem rozwiązano poprzez korektę połączeń sprzętowych.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA