Problémy s UART – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problémy s UART – Mikrokontroléry – Fórum – Programujte.comProblémy s UART – Mikrokontroléry – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
marpit0
Stálý člen
24. 5. 2013   #1
-
0
-

Zdravím,

k mikroprocesoru mám prostřednictvím přepínače na piny RX a TX připojen převodník na USB (který bez problému funguje, tedy lze vysílaná data bez problému přijímat na PC) a převodník MAX232 pro komunikaci prostřednictvím seriového kanálu. A tu je právě problém. Pokud chci číst vysílaná data pomoci RS232, tak PC nic nepřijímá (zkoušeno na dvou PC, na každém v Hyperterminálu a v ZOCu). Zkoušel jsem výstup za MAXem zkontrolovat osciloskopem, který zobrazí číslicový průběh -10; 10 V, stejný signál je i na pinu 2 na konci propojovacího kabelu.

Vzhledem k tomu, že bez problému funguje přenos přes USB převodník, tak předpokládám, že nebude chyba na straně programu pro mikroprocesor. Osciloskop rovněž zobrazuje průběh za RS232 převodníkem, tudíž na HW chybu to rovněž nevypadá. 

Byl bych docela rád za každou radu, protože opravdu netuším, kde může být problém. 

Pro úplnost přikládám zdrojový kód a schéma zapojení MAXíka. 

/* 
 * File:   newmain.c
 * Author: Martin
 *
 * Created on 23. kv?ten 2013, 11:43
 */

#include <stdio.h>
#include <stdlib.h>

#include <pic16f877a.h>
#include <xc.h>

#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

int main(void)
{
    SPBRG = 14;
    TXSTA = 0x20;
    RCSTA = 0x80;
    unsigned int v0 = 48;
    vysli:
    TXREG = v0;
    while(!TRMT);
    v0++;
    goto vysli;


    return 0;
}
Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
24. 5. 2013   #2
-
0
-

pokud X1 zapojuješ přímo do konektoru na PC, mělo by to být OK. Ošetřil bych si nezapojené vstupy MAX232 připojením na definovanou úroveň.

U současných PC nestačí zapojit RxD, TxD a GND. Komunikace buď padá nebo nefunguje vůbec. Je to delší dobu, co jsem nad tím bádal, ale řešením bylo zapojení na konektoru na straně PC jako null modem, aspoň tuším. Pokud neuspěješ, zeptej se tady zítra, podívám se v práci jak to bylo.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
24. 5. 2013   #3
-
0
-

#2 hlucheucho
Ano, X1 je přímo přes kabel připojen k portu na PC. 

Teď jsem zkusil rozebrat konektor na kabelu na straně PC a propojit piny 7 - 8 a 1 - 4 - 6 (což by mělo odpovídat tomu, co jste uváděl) a stále nic. 

Když tak bych tedy zítra, pokud ještě na něco nepřijdu, uvítal informaci, jak jste to vyřešil.

Zatím díky.  

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
24. 5. 2013   #4
-
0
-

ještě jedna drobnost. Mají obě strany nastavené stejné parametry? (baudrate, parita, STOP bity). Pro pokusy s komunikací přes COM jsem vždy používal Terminal.exe

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
24. 5. 2013   #5
-
0
-

#4 hlucheucho
Parametry by na obou dvou stranách měly být stejné.

USB výstup se vlastně chová jako virtuální COM port a tam při daném nastavení funguje vše jak má. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
24. 5. 2013   #6
-
0
-

na osciloskopu se dají data přečíst, chodí to co posíláš? Je ten přepínač v pořádku a správně zapojený? Jsou na vývodech MAX232 9 (data z PC) a 10 (data z MCU) signály s úrovněmi CMOS-5V? Vývod 2 by měl mít cca 8V a vývod 6 by měl mít cca -8V

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
24. 5. 2013   #7
-
0
-

Přepínač je správně zapojený, na pinu 10 MAXíka signál je (0; 5V), na pinu 7 je signál -9V a 10V, což by mělo sedět.

Napětí na pinech 2 a 6 jsem neměřil, ale předpokládám, že pokud napětí na pinu 7 se pohybuje v rozmezí od -9V do 10V, tak by i napětí na těchto pinech mělo být OK. 

Pokud vezmu konektor (na straně co se strká do PC), tak na pinu 2 konektoru signál je, což by mělo být v pořádku.

Zkoušel jsem i funkčnost COM portu v PC, kdy jsem na pin 3 na konektoru v PC dal osciloskop a přes ZOC poslal textový soubor, signál tam byl. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
24. 5. 2013   #8
-
0
-

zkus u MAX232 propojit vývody 13 - 14  a  11 - 10. Mělo by být blokování napájení u MAX232 100nF. Je možné MAX232 zapojit jako smyčku a otestovat HW. Stačí aby byl odpojen od MCU - přepínač v poloze na USB převodník a propojit 9 - 10. PC by měl příjmout co sám odeslal.

zkus použít ten terminal.exe. 

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
24. 5. 2013   #9
-
0
-

U obvodu je elektrolyt 1M (na schématku není, protože napájení obvodu mám řešeno v jiné části). 

Uvažuju, že asi poexperimentuji na nepájivku. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
24. 5. 2013   #10
-
0
-

to propojení na smyčku si zkusil?

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
24. 5. 2013   #11
-
0
-

Ještě ne, zřejmě to nechám na ráno. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
24. 5. 2013   #12
-
0
-

když to budeš číst osciloskopem, mělo by ti z MCU do PC chodit (jednotlivé bity) 0 00110000 1 a celé by to mělo trvat 10/baudrate. Na RS232 je 1 záporné napětí. Tu smyčku můžeš zkusit už teď, to je za 5 min. hotové

hu

Nahlásit jako SPAM
IP: 188.95.60.–
24. 5. 2013   #13
-
0
-

tady je to moje bádání: http://www.4itdevelopers.net/PhorumThread.aspx?phorum=12&thread=3318754

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
25. 5. 2013   #14
-
0
-

Zkusil jsem tu smyčku, ze ZOCu poslán textový soubor, propojený výstup a vstup na MAXíkovi 10 - 9 (přepínač přepnut na USB). PC nic nepříjímal. Osciloskopem sledován signál na pinu 8, signál zde byl a s patřičnými úrovněmi, piny 10 a 9 TTL signál, na pinu 7 opět v pořádku. 

Rovněž vyzkoušen terminál Herkules, opět bez výsledku. 

Pamatuji si, že minulý rok jsem řešil něco podobného, ale tenkrát tuším byla chyba "jen" v nezapájením pinu u Aducu (MCU byl trvale v BOOT režimu). Alespoň si nepamatuji, že bych dělal něco dalšího. Schéma bylo tenkrát totožné s tím, které zde uvádím. 

Chtěl jsem krapet poexperimentovat na nepájivku, ale jak na potvoru doma ani jeden MAXík  

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
marpit0
Stálý člen
25. 5. 2013   #15
-
0
-

K vašemu odkazu, řekl bych, že jste zřejmě bojoval trochu s jiným problémem, neboť, jestli jsem dobře pochopil, vám ten přenos začal a až pak začal chybovat.  

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
25. 5. 2013   #16
-
0
-

pokud PC nepříjme nic, tak bude chyba u něj - buď zapojení konektoru a nebo použitý SW. Pro nalezení chyby bych si konektor zapojil jako smyčku (loop back) http://airborn.com.au/serial/rs232.html. Pravděpodobně bude "vtip" v zapojení konektoru. Terminal.exe mne nikdy nezklamal.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
marpit0
Stálý člen
25. 5. 2013   #17
-
0
-

#16 hlucheucho
zkusím a dám vědět

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
Řešení
marpit0
Stálý člen
30. 5. 2013   #18
-
0
-
Vyřešeno Nejlepší odpověď

Tak nakonec nalezeno řešení, avšak úplně někde jinde, než jsem čekal. Chyba byla v návrhu desky, respektive konektor měl v Eagle špatně propojené piny pouzdra s piny na schématu, tedy zem byla na jedničce a data na 4. Já potom při měření udělal další chybu, že jsem měřil na pinech napájených na DPS, ne přímo na konektoru. 

Takže poučení pro příště, že u knihoven třetích stran je potřeba myslet na to, že mohou být udělány špatně. 

Po slupnutí mědi na desce a předrátování vše šlape jak má. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Uart buffer — založil davixxx

ATmega16 UART — založil Pelda

Atmega16 uart — založil jur3c

Uart příjem z AVR — založil Ghulas

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý