BASCOM - Komunikace RS 232 - ATmega ČTE ale nejde PSÁT

Dobrý den, prosím vás moc o pomoc…

Mám ATMEGA8 a MAX232, mám prográmek v bascomu

$regfile = “m8def.dat”
$crystal = 1000000
$baud = 2400

Config Pinb.1 = Output
Enable Interrupts
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Dim Firstnumber As Integer
Dim Secondnumber As Integer
Dim Sum As Integer

Do
Portb.1 = 1
Waitms 1000
Firstnumber = 0
Secondnumber = 0
Input "Enter first number : " , Firstnumber
Input "Enter second number: " , Secondnumber
Sum = Firstnumber + Secondnumber
Print "Součet: " ; Sum
Portb.1 = 0
Waitms 1000
Loop

End

Uplne v pohode v terminalu se mi po pripojeni cipu k pc objevi hlaska " Input first number" ale zapsat pomoci klavesnice PC toto cislo nemuzu, proste to nejde…

Kdyz vyndam atmegu a propojim RXD S TXD, tak na terminalu v pc vidim co pisu…neboli co odesilam se mi vraci do PC…proc mi to nefunguje prosim s cipem?

:arrow_right: administrator: přejmenováno z "KOmunikace RS 232 atmega ČTE ale nejde PSÁT"

přejdi z bascomu na nějaký normálnější jazyk a uděláš lépe jak pro sebe tak pro procesor…

No jo, ale když už jsem v tom…

čím to může posím být?

Pripajam sa k vyssie uvedenemu nazoru :slight_smile:
uvedenej notacii je tazko (pre nezasvetenych ) rozumiet.

Ale aj tak.

Ak je firstnumber integer, tak potom zapisovanim cisla cez terminal systemom “12345” urcite nebude fungovat, lebo to vysielas 5 ZNAKOV a nie cislo typu integer.
Alebo to vsetko zabezpecuje pre mna zahadna funckia Input?

Ak nie, tak prijmi znaky a uloz ich do pola char (jednobajtova premenna) a potom si toto pole odvysielaj naspet, napriklad tak, ze kazda polozka bude zvacsena o 1.
Na zaciatok prijmy jeden znak z PC a posli ho naspat zvacseny o 1.
Tak si postupne program rozsiruj, az dosiahnes co chces.

Okrem toho, pises velmi zmatene. Kde sa objavi hlaska? Nie je jasne ze funkcia Input nieco vysiela na UART. Pri takychto menej standartnych jazykoch musis viac rozpisat co ako robi, lebo ako to my malo vzdelani mame zistit a potom nasledne poradit?

džejár:
Nemusíte nikam přecházet, program je v pořádku.
Zkoušel jsem ho s terminálem v Bascomu (Menu-Tools-Terminal emulator).

Pro jistotu: po napsání čísla je třeba stisknout Enter.

Podívejte se také na Help - Config Input.
Příkaz Input defaultně očekává na konci příjmu znak CR (0xD).

No, jakmile připojím mikrokontroler k počítačí, tak se mi zobrazi v emulatoru " vlozte prvni cislo" …no a to je vse, jakmile se snazim klavesnici cokoliv vlozit, napsat, tak se zkratka dale nedeje nic, vypada to, ze ATMEGA neprijala zadnou stisknutou klavesu z PC a tedy neposunula me na nabidku vlozeni druheho cisla…zkratka nejde nic vlozit z klavesnice tak, aby ATMEGA regovala…

Ano, v emulatoru jsem to taky zkousem a v SIMULATE PROGRAM taky zkoušel, všude to jede, to ano, jen ne, když to clovek zkusi naostro s PC a ATMEGOU…

napadá Vás ještě něco, prosím?

Asi jste mi nerozumněl.
Já jsem přece zkoušel “naostro” jak říkáte.
Připojil jsem svoji desku k PC a jako terminál jsem použil Terminal emulator
z Bascomu, jak jsem popsal výše.

To není nějaký simulátor, ale plně funkční terminál.
Nastavte na něm použitý port a baudovou rychlost a zkuste.

AB

děkuji za odpověď…tak to je zvláštní…jsem kontroloval všechna nastavení…a nenašel nic zvláštního…mám nějak speciálně nastavit fusebity?

Přes ten terminál v bascomu to taky zkouším naostro a právě mi to vykazuje takovou chybu…

může to být třba v max232 v obvodu tato chyba? Toto vyvracím títm, že když vyjmu megu a propojím TXD s RXD a mačkám klávesym, tak se mi znaky vypisují do terminálu…

už jsem vyměnil jiný MAX232 jinou ATMEGA8 …ale chyba nezmizela, tak to musí být asi fakt nějakým nastavením…ale compiler mám OK, communication v nastavení bascomu také…napadají mě fusebity,…ale ty jsou taky v pořádku na použití s interním oscilátorem…už jsem z toho jelen, ale dáváte mi naději…

prosím…máte něco spšl nastavené v bascomu?

Prosím pomoc…

u max 232, našel jsem různé návody…

elektrolytický kondenzátor z pinu 2 MAXE, na který je napojen svým kladným koncem je dále napojen na záporný pól zdroje

a

elektrolytický kondenzátor na pinu 6 MAXE je na něj napojen svým záporným koncem a jeho kladný konec jde dále na záporný pól zdroje

Je to prosím tak?

Já už nevím, kde mám heldat chybu

V tom případě je zbytečné hledat chybu v max232. Ten je v pořádku, jinak by se znaky nevracely.

Zkuste tento jednoduchý program, který také jenom vrací znaky

[code]$regfile = “m8def.dat”
$crystal = 1000000
$hwstack = 100
$swstack = 50
$framesize = 50
$baud = 2400

Dim C As Byte

Do
Inputbin C
Printbin C
Loop
End[/code]

Děkuji za tuto radu…

vypisuje mi bascom chybu:

“Assignment error” pro tyto řádky:
$hwstack = 100
$swstack = 50
$framesize = 50

už jsem zkusil u maxe vymenit kondenzatory na 10 mikro a nepomohlo, stejny problem…

To je divné, mně nehlásí chybu ať dám jakékoliv hodnoty.
Kterou verzi Bascomu máte?

Posílám fungující hex soubor.
Zkuste ho s vaším procesorem.
Má vracet znaky zadané z klávesnice.
Test.zip (1.63 KB)

Děkuji Vám AB za soubor…

přesunul jsem jej do megy a na terminálu se napsalo pouze STRAT…dale se delo to co vzdy, ze jsem nemohl vkladat z klavesnice pc zadne znaky…

verze bascom: 1.11.7.4

děkuji…

opravdu tonemůže být v MAX232? I když znaky posílám na terminál pakliže spojím bez megy rxd txd?

Podle mne, pokud to takto chodí, tak max by měl být dobrý.

Můžete orientačně zkusit jestli něco přichází na RXD pin.
Když na něho dám ledku s odporem proti zemi a držím znak na klávesnici, tak bliká.
Na terminálu jsem nastavil 300 baud aby blikání bylo zřetelnější.

Tak jsem podle Vašich rad zkoušl připojit diodu:

vyhodil jsem atmegu z patice a nepropojuji na patici RXD a TXD:

na pinu 13 MAXE dioda při stisknutí klávesnice na PC bliká po stisknutí kláevsy
na PINU 14 MAXE nebliká nesvítí
NA PINU 11 MAXE (jde na pin 3 atmegy TXD) nebliká
NA PINU 12 MAXE (jde na pin 2 atmegy RXD) svítí

vyhodil jsem atmegu z patice a PROPOJUJI na patici RXD a TXD:

na pinu 13 MAXE dioda při stisknutí klávesnice na PC bliká
na PINU 14 MAXE nebliká nesvítí
NA PINU 11 MAXE (jde na pin 3 atmegy TXD) svítí
NA PINU 12 MAXE (jde na pin 2 atmegy RXD) svít

Jakmile vložím megu s Vašim programem:

í
na pinu 13 MAXE dioda při stisknutí klávesnice na PC bliká
na PINU 14 MAXE nebliká nesvítí
NA PINU 11 MAXE (jde na pin 3 atmegy TXD) svítí
NA PINU 12 MAXE (jde na pin 2 atmegy RXD) svítí

Na obrázku zasílám propojení MAXE232 je tam pár součástek…prosím Vás o kontrolu, jestli je vše v pořádku…

děkuji moc…

Aspon by si mohol vyznacit, kde je pin c.1. Tak ako si to nakreslil by mal byt (podla orientacie textu na cipe) vpravo dole. A dobre je sipakmi urcit smer signalu. Takto to vyzera, ze MAX232 generuje TX i RX pre procesor i pre PC.

Uz ti to tu niekto pisal, ak prepojis RX a TX na strane mcu a to co odvysielas tak to i prijmes, chybu nehladaj v 232 cipe. Velkost kondenzatorov ma vplyv iba na velkost a tvrdost generovaneho napatia +/- 12V. Ak na pine TX smerom k PC namerias aspon +/-3V (minimalne napatie pre korektnu pracu RS232), tak je vsetko OK a s kondikmi nebantuj. Ak je schopny procesor nieco vyslat, tak to je tiez znakom spravnej funkcnosti 232 cipu.

To ale nemeni nic na tom, ze z pinu 2 ma ist kondenzator na GND a nie na +5V. Skontroluj si doporucene zapojenie.

Co sa blikania LED tyka, treba si uvedomit, ze na strane RS232 je opacna logika. To znamena, log.1 je -3 az -12V a log.0 je +3 az +12V. Na strane TTL je log. 0 napatie v rozsahu 0 az 0.7V a log.1 od 2.4V do 5V. CMOS logika ma napatove urovne definovane trochu inak, ale v principe je to to iste ako TTL. Takze ak Ti LEDka blika na pine 13, musi Ti blikat aj na pine 14, ale diodu musis otocit. Podla Tvojho merania to tak nie je, tak si skontroluj este tuto cast.

Na internetu jsou vidět i zapojení s pinem 2 na plus.
sodoityourself.com/max232-serial … converter/

Když není osciloskop, zkusil bych jeden nevědecký test.
Pokud je v procesoru program na vracení znaků, tak při uzemnění pinu RXD napodobíme přijetí impulsu start.
Když uzemněným drátem jemně přejíždím po pinu RXD, tak AVR přijímá náhodné znaky a vidím je v terminálu.

AB, máte pravdu,

když přerušovaně jezdím po pinu 2 na ATMEGA8 uzemněným drátkem, na terminálu se mi objevují náhodné znaky…

to tedy znamená…že příjem signálu na atmega8 je OK, ale vysílání je KO…že…

ale co teď…prosím?

To ale zavisi od vyrobcu prislusneho cipu. TI to ma o GND a napr. MAXIM o o 5V.

focus.ti.com/lit/ds/symlink/max232.pdf

datasheets.maxim-ic.com/en/ds/MAX220-MAX249.pdf

Ale bez ohladu na to, ten kondik nebude na pricine. Jedna sa len o nasobic napatie, ci je oprety o GND alebo o 5V. Pre spravnu cinnost RS232 musi byt na vystupnom pine minimalne 3V a to bezpecne splnaju obe zapojenia.