реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AVR и ПК, AVR и ПК
dim_OK
сообщение Mar 12 2007, 19:20
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



состыкавал плату с МК и MAX232 с ПК по COM-порту написал прогу на ассемблере. Отправляю с компа утилитой COMPortToolKit определённое число, МК его принимает и тут же отправляет обратно. Этой же утилитой можно смотреть что пришло в порт. А приходит ноль, причём независимо от того какое число отправлял. Прогу писал без всяких протоколов.
Подскажите от чего такое может быть и в каком направлении надо думать.
help.gif help.gif help.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 12 2007, 19:25
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 dim_OK - чтобы было проще и вам и нам не моглы бы вы привести листинг этой злополучной проги??
Go to the top of the page
 
+Quote Post
Igor26
сообщение Mar 12 2007, 20:31
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
и тут же отправляет обратно

...с этого момента подробней пожалуйста. Я зачастую тоже пользуюсь этой утилитой и подобных вещей не наблюдал. Такое было, когда не совпадали скорости приёма/передачи.

OFF P.S. Котейка все ноги искорябал!!! Так ему и хочется на клавиатуру запрыгнуть!
Go to the top of the page
 
+Quote Post
bodja74
сообщение Mar 12 2007, 21:51
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Думаю лучше начать с того ,чтобы МК вообще что нибудь отправлял на комп например при включении питания МК,так легче определить несовпадение скоростей.
Go to the top of the page
 
+Quote Post
GDaniloff
сообщение Mar 12 2007, 22:29
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 10-03-07
Пользователь №: 26 032



ничего не имею против max232, но можно обойтись и без него - см. app.note avr910 smile.gif
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Mar 13 2007, 10:05
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Цитата(dim_OK @ Mar 12 2007, 20:20) *
... А приходит ноль, причём независимо от того какое число отправлял...
....в каком направлении надо думать.

Какая задана скорость UART и правильно ли она задана.
Часто ошибки возникают в загрузке регистров UBRRH и UBRRL (задают скорость обмена). Надо помнить, что UBRRH и UCSRC (регистр управления и статуса) имеют общий адрес, а разделение выполняется битом URSEL.
Возможно по этому приходят нули, так как реально, из-за ошибки в обращении к UBRRH и UCSRC, задана очень низкая скорость.
Go to the top of the page
 
+Quote Post
dim_OK
сообщение Mar 13 2007, 11:10
Сообщение #7





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



Вот она! Причём если задан правильный делитель, т. е. скорости в ToolKit и МК заданы одинаковые то ToolKit отправляет и ничего не принемает. Если же установить делитель 1 и скорость 1200 в ToolKit, то ToolKit отправляет определённое число, а принимает ноль. При делителе 51 скорость равна 4800, для кварца на 4МГц.
;ИНИЦИАЛИЗАЦИЯ
ldi r16,51
out UBRRH, r16
ldi r16, (1<<URSEL)|(0<<USBS)|(3<<UCSZ0);Set frame format: 8data, 1stop bit
out UCSRC,r16
ldi r16, (1<<RXEN)|(1<<TXEN) ;Enable Receiver and Transmitter
out UCSRB,r16
;*************************
LOOP:
rcall WAIT_small ;это
sbi portb,pb3 ;типа
rcall WAIT_small ;светодиод
cbi portb,pb3 ;моргает

sbi UCSRA,TXC
rec: sbis UCSRA,RXC
rjmp rec
rcall RECIVE
rcall TRANSMIT
sbic UCSRA,TXC
rjmp IND1
rjmp LOOP

IND1:
ldi r26,cod_2
out porta,r26
sbi portb,pb0
sbi portb,pb1
rjmp LOOP

;****************
RECIVE:
clr r18
in r18,UDR

sbic UCSRA,RXC
rjmp RECIVE
ret
;***************
TRANSMIT:
out UDR,r18
ret
;***************
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Mar 13 2007, 11:34
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Цитата(dim_OK @ Mar 13 2007, 12:10) *
ldi r16,51
out UBRRH, r16
Здесь надо записывать код 51 в UBRRL, а в UBRRH записать код нуля.

На С это выглядит так (xtal,baud это константы):
void init_uart(void)
{UBRRH = (byte)((xtal/16/baud-1)>>8); //Set baud rate for UART
UBRRL = (byte)(xtal/16/baud-1);
UCSRB=((1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN)); //Enable RX & TX (RXEN,TXEN)
//and interrupt (RXCIE,TXCIE)
UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);}//Frame format: 2stop bit, 8data (Select 1<<URSEL)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 13 2007, 11:49
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Тут нуна действительно посмотреть на инициализацию усарта..
код нуля в принципе писать не обязательно но желательно(хотя если он стартует с ресета - то там точно нули).
на асме вот листинг с утра компилил - дЫвайс отзывается smile.gif
@00000438: USART_INIT
1805: {
+00000438: 921000C1 STS 0x00C1,R1 Store direct to data space
1811: UCSR0A = 0x00;
+0000043A: 921000C0 STS 0x00C0,R1 Store direct to data space
1812: UCSR0C = 0x06;
+0000043C: E086 LDI R24,0x06 Load immediate
+0000043D: 938000C2 STS 0x00C2,R24 Store direct to data space
1814: UBRR0L = EEPROM_DATA._def_UBRR0L; //set baud rate lo --------- тут конечно своё..
+0000043F: 9180036F LDS R24,0x036F Load direct from data space
+00000441: 938000C4 STS 0x00C4,R24 Store direct to data space
1815: UBRR0H = EEPROM_DATA._def_UBRR0H; //set baud rate hi --------- тут конечно своё..
+00000443: 91800370 LDS R24,0x0370 Load direct from data space
+00000445: 938000C5 STS 0x00C5,R24 Store direct to data space
1819: UCSR0B = 0x98;
+00000447: E988 LDI R24,0x98 Load immediate
+00000448: 938000C1 STS 0x00C1,R24 Store direct to data space
+0000044A: 9508 RET


вот....

Сделайте в программе так - проинициализируйте усарт, отправте символ, если получите - тогда надо двигаться далее...

Сообщение отредактировал Kuzmi4 - Mar 13 2007, 11:52
Go to the top of the page
 
+Quote Post
Dopler
сообщение Mar 13 2007, 12:45
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Было бы еще неплохо знать, что за МК, так как у разных МК регистры USART могут выпадать из IO области. Вот код инициализации на передачу для меги8, дальше, как уже советовали, в цикле передавайте байт и смотрите на ПК.

Код
    clr        zero

;инициализация UARTa
    ldi     tmp,    3    ; скорость 115200 для кварца 7.3728 мегагерц

    out     UBRRH, zero
    out     UBRRL, tmp

    ldi     tmp,    (1<<TXEN)    ; разрешена передача
    out     UCSRB,    tmp
    ldi     tmp,    (1<<URSEL)|(3<<UCSZ0); 8data, 1stopbit
    out     UCSRC,    tmp


;передаем данные в компьютер
SendLoop:
    sbis    UCSRA,    UDRE
    rjmp    SendLoop
    
    ldi     tmp,    0x85        
    out    udr,    tmp
rjmp    SendLoop
Go to the top of the page
 
+Quote Post
dim_OK
сообщение Mar 13 2007, 13:37
Сообщение #11





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



Да придётся Си изучать ибо я в нём не силён. Ну а я сделал как писалось в последнем сообщении

clr zero
out UBRRH,zero
ldi r16,6
out UBRRL, r16
ldi r16, (1<<URSEL)|(0<<USBS)|(3<<UCSZ0);Set frame format: 8data, 1stop bit
out UCSRC,r16
ldi r16, (1<<RXEN)|(1<<TXEN) ;Enable Receiver and Transmitter
out UCSRB,r16

Но чё то не очень заработало, т. е. я ToolKit'ом отправляю, МК принимает но посылает обратно всё равно нули. Хотя скорости теперь в МК и ToolKit совпадают 115200.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 13 2007, 13:44
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 dim_OK - всё же советую вам всё таки построить программу так - мк стартует инициализирует усарт а потом по циклу отсылает байт...
ну а если уж очень хочется по своему методу - то хоть сделайте в программе проверку что вы приняли то что отправили....
вот вам ещё пример сгенерённый ЦВ для инициализации - не может оно не работать -
//При кристалле 7.372800
//
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud rate: 9600
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x2F;
Go to the top of the page
 
+Quote Post
dim_OK
сообщение Mar 13 2007, 21:51
Сообщение #13





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



Ага, а что значит сделать проверку. Вот этого честно скажу я не понимаю. Что надо сделать с принятой инфой конкретно? Я ведь пишу прогу без всяких протоколов. Делаю это в AVRStudio и так как написано в последнем примере вижу первый раз. Не могли бы вы прокоментировать его.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Mar 13 2007, 22:44
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(dim_OK @ Mar 13 2007, 21:51) *
Ага, а что значит сделать проверку. Вот этого честно скажу я не понимаю. Что надо сделать с принятой инфой конкретно? Я ведь пишу прогу без всяких протоколов. Делаю это в AVRStudio и так как написано в последнем примере вижу первый раз. Не могли бы вы прокоментировать его.


Вам надо просто написать здесь, какой у вас контроллер и кварц на нем, а я вам дам листинг готового примера (как я приводил выше, но полностью готовый), вы его откомпилируете, зашьете в контроллер и увидите работоспособность железа (или не увидите). А дальше делайте с ним, что хотите.
Go to the top of the page
 
+Quote Post
dim_OK
сообщение Mar 14 2007, 10:08
Сообщение #15





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



[/quote]
Вам надо просто написать здесь, какой у вас контроллер и кварц на нем, а я вам дам листинг готового примера (как я приводил выше, но полностью готовый), вы его откомпилируете, зашьете в контроллер и увидите работоспособность железа (или не увидите). А дальше делайте с ним, что хотите.
[/quote]

Спасибо огромное. Кварц на 12МГц на контроллере ATMega8535.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 09:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016