Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

UASRT rx interrupt проблем, ATmega8, asm
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10531
Страница 1 от 1

Автор:  showMANiak [ Нед Сеп 30, 2012 9:35 am ]
Заглавие:  UASRT rx interrupt проблем, ATmega8, asm

Здраво на всички.Скъса ми нервите тоя UART.Ето какво измъдрих:
Код:
.include "m8def.inc"
.org 0
rjmp Main
.org 0x00B
rjmp Receive
.org 0x40
Main:
ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16
ldi r16,(1<<RXCIE)|(1<<RXEN)
out UCSRB,r16
ldi r16,(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
out UCSRC,r16
ldi r16,0x25
out UBRRL,r16
ldi r16,$FF
out ddrb,r16
ldi r16,0
out portb,r16
sei
here:rjmp here
Receive:
in r16,udr
out portb,r16
reti

Проблема е ,че в общи линии нереални стойности излизат на порта,а не това което пращам от компа.Примерно ,ако изпратя 128 десетично,ми излиза на порта 255 или пък ако изпратя 'А' ми излиза някакъв съвсем друг символ.
За проба във функцията на интеръпта направих ,така че нулевия пин на порт Б да си сменя състоянието при пристигане на данни и там всичко си е ток ,демек сменя си на всяко пристигане на данни състояниeто ,т.е проблема не е в самия код за обработка на интеръпта а някъде другаде...може би.
Настройките са си ок и от двете страни - 2400 бита/сек,8 бита,1 стоп бит,без parity (не мога да се сетя как се превеждаше на български :oops: )
Интересното е ,че ако я пренапиша без интеръпти ,демек да проверява RXC флага ,си бачка съвсем редовно програмката.
100 пъти пренаписвах,четох за 3465 път pdf-a на мегата,пак пренаписвах и не виждам нищо да пропускам и вече се изчерпах откъм предположения :x
Помощ? :)

Автор:  Cino [ Нед Сеп 30, 2012 10:57 am ]
Заглавие:  Re: Къде бъркам с тоя проклет UART?

тази стойност 0x25 за UBBRL, (UBBRH след ресет е 0)
на 2400, какъв такт трябва да ползваш.
Поне не я виждам в таблиците на даташиита.

Автор:  showMANiak [ Нед Сеп 30, 2012 7:05 pm ]
Заглавие:  Re: Къде бъркам с тоя проклет UART?

Вътрешния осцилатор на мегата-1Мхц

Автор:  Nikola Kirov [ Нед Сеп 30, 2012 7:15 pm ]
Заглавие:  Re: Къде бъркам с тоя проклет UART?

Мегата няма прецизен RC генератор който можеш да ползваш за UART. Сложи си външен кварц.

Автор:  tgi [ Нед Сеп 30, 2012 7:24 pm ]
Заглавие:  Re: Къде бъркам с тоя проклет UART?

Е нали го е докарал да работи без прекъсвания, къде го пращате при
кварца. То не че е зле да елиминира това неизвестно де ама изглежда му
е ясно кое как е там.

Автор:  Nikola Kirov [ Нед Сеп 30, 2012 7:28 pm ]
Заглавие:  Re: Къде бъркам с тоя проклет UART?

Колко е работило не е ясно. Тоя 1 MHz е много неточен.
А ако пишеше на C можеше и с сорс да му помогна ама като го мързи да учи ще се мъчи.

Автор:  Cino [ Нед Сеп 30, 2012 7:42 pm ]
Заглавие:  Re: Къде бъркам с тоя проклет UART?

ами пратих го на кварца,
защото стойността за 2400 на 1MHz вътрешен осцилатор
е 25dec , а не 25hex,
явно 3465 пъти четене не са му стигнали,

А я е докарал да работи, като гледа че на всeки приет символ
му идва прекъсването, без да проврява фрейм еррора. което при тази настройка
на бод рейта , съм сигурен че идва точно символ с фрейм еррор.

Иначе колко по лесно за всички щеше да е ако темата се каваше примерно:
"UASRT rx interrupt проблем, ATmega8, asm"

Нито е писал кой е контролера, ( добре че има инклуднат хедър )
нито е казал че е на вътрешен осцилатор ( добре че чака порт B, та там не е включил външния ),
нито е казал с какво асемблира, AVR Studio ли, команден ред и нотпад ли ползва.
нито е написал четимо 20 реда код, да се чуди човек кое са векторите на прекъсванията,
къде започва мейна, къде е събрутина на rx прекъсването.
Нито е казал с кой незнаен клонинг на програматор работи, който също е на порт Б , и не се
знае как отпуска линиите.
За фюзовете също няма нищо споменато, да се чудим на колко MHz го кара този контролер

Също и неточността на вътрешния осцилатор спомената от Киров,

Автор:  showMANiak [ Нед Сеп 30, 2012 11:01 pm ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

При положение ,че работи без интеръпти,не съм много сигурен,че проблема е точно в осцилатора :?
Киров,по въпроса със Си-то-не мерси.Асемблера ми се струва някак си по удобен специално за микроконтролерите.Все пак си е "натуралния" им език ,ама всеки си има вкус :wink:
А и да-ако ме мързеше щях да бягам от асемблера,а не да се мъча да го уча :idea:
Cino,по твоите въпроси да кажа,че кода е набързо надраскан с цел просто да проверя дали се случват нещата както трябва.Не претендирам за читаемост,а някои работи за човек,който се занимава с такива неща според мен ,нямат нужда от пояснение и се разбират от кода -например процесора.Че съм пропуснал да споделя някои други важни неща-факт :oops: .Както и да е ,да не отмествам темата.Така или иначе ,като (ако) разбера къде ми е грешката ще си спретна кода,пък и мегата няма да остане на 1Мхц вътрешен.Иначе компилирам със студиото,програматора е измишльотина-на принтерския порт с 4 резистора,но за неотговорни дейности си върши работата.Пека с понито.
П.П-Пробвах и с 25 десетично за UBRRL-пак същото.Утре ще проверя дали дава frame error при пристигането

Автор:  tgi [ Нед Сеп 30, 2012 11:47 pm ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

За писане на асемблер няма да сбъркаш ако свикнеш да пишеш коментар на всеки ред,
на английски. Без това си обречен, то всъщност е и едно от основните предимства
на програмирането на асемблер.
Баш на тоя процесор асемблерът му е доста крив и неудобен - все пак е за дребна архитектура - но
това не пречи, създадените навици се пренасят съвсем лесно на какъвто и да е език нататък.

Това, че на делителя му е все едно каква стойност слагаш (това 25/37) говори обаче, че има нещо тотално криво
и навярно са прави тия, дето те пращат при осцилатора (едва ли е единственият проблем ама
трябва да е проблем ако е едно и също и при 25 и при 37, ако съм разбрал правилно).

Автор:  showMANiak [ Пон Окт 01, 2012 9:54 pm ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

Не знам дали съм в грешка,ама май проблема ще се окаже в компилатора на студиото :o .Одеве свалих от един сайт (http://www.mikrocontroller.net/articles ... rial:_UART ) готов сорс ,като само промених да изкарва резултата на порт Б (т.е закачих кварц 4 Мхц на мегата) и пак същото поведение 8O
При положение,че и на 4 Мхц със да кажем по-сигурен от моя код не бачка,остава да е проблема в компилатора :?:

Автор:  Dimitar [ Вто Окт 02, 2012 12:30 am ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

Цитат:
остава да е проблема в компилатора

Моя опит сочи, че обикновено проблема е в предмониторното устройство :) .
Иначе съм чувал също "програмата съм сигурен, че ми е вярна, просто процесора не интерпретира правилно инструкциите" :D .

Автор:  tgi [ Вто Окт 02, 2012 2:00 am ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

За да може човек да каже, че даден компилатор (бе това не беше ли някакъв асемблер?) греши,
трябва да го хване точно къде и в какво и да го демострира. Всичко друго са празни приказки.
Ако не може да го хване значи не знае достатъчно за да разсъждава по въпроса :D .
Хващал съм грешки, най-много на моите - то аз и от близо 20 години само с тях работя - и мога
да кажа, че е много малко вероятно по принцип, в случая не мисля, че въобще има някаква
значима вероятност да е така.

Автор:  Ники [ Вто Окт 02, 2012 2:02 am ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

Компилаторите на асемблер са близки до безгрешността :)

Автор:  showMANiak [ Вто Окт 02, 2012 8:10 am ]
Заглавие:  Re: UASRT rx interrupt проблем, ATmega8, asm

Новобрански надежди значи :(.Довечера пак ще си блъскам главата след работа...

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/