-
Постов
11 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о dim_OK
- День рождения 07.11.1917
Контакты
-
Сайт
Array
Информация
-
Город
Array
-
Спасибо огромное, работает. Но что же получается усарт работает не от кварца, а от внутреннего генератора. Я то думал наооборот, и расчитывал делители для 12 МГц. И теперь если я захочу поменять скорость передачи\приёма то надо будет расчитывать делитель для 1 МГц а не для 12?
-
Спасибо полезная инфа, в книжках про такой кварц ни чего не сказано.
-
Вам надо просто написать здесь, какой у вас контроллер и кварц на нем, а я вам дам листинг готового примера (как я приводил выше, но полностью готовый), вы его откомпилируете, зашьете в контроллер и увидите работоспособность железа (или не увидите). А дальше делайте с ним, что хотите. Спасибо огромное. Кварц на 12МГц на контроллере ATMega8535.
-
Ага, а что значит сделать проверку. Вот этого честно скажу я не понимаю. Что надо сделать с принятой инфой конкретно? Я ведь пишу прогу без всяких протоколов. Делаю это в AVRStudio и так как написано в последнем примере вижу первый раз. Не могли бы вы прокоментировать его.
-
Да придётся Си изучать ибо я в нём не силён. Ну а я сделал как писалось в последнем сообщении 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.
-
Вот она! Причём если задан правильный делитель, т. е. скорости в 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 ;***************
-
состыкавал плату с МК и MAX232 с ПК по COM-порту написал прогу на ассемблере. Отправляю с компа утилитой COMPortToolKit определённое число, МК его принимает и тут же отправляет обратно. Этой же утилитой можно смотреть что пришло в порт. А приходит ноль, причём независимо от того какое число отправлял. Прогу писал без всяких протоколов. Подскажите от чего такое может быть и в каком направлении надо думать.
-
ATMega 8535 стыковка с ПК через RS-232
dim_OK ответил dim_OK тема в В помощь начинающему
Как там на счёт кода? :a14: -
ATMega 8535 стыковка с ПК через RS-232
dim_OK ответил dim_OK тема в В помощь начинающему
Вот кусочек для МК: ********************** LOOP: clr r18; rcall RECIVE cbi UCSRB,pb4 ;Disable Receiver and Transmitter out porta,r18 ;это sbi portb,pb0 ;семисеоментник sbi portb,pb1 ; rjmp LOOP RECIVE: ldi r16,0x12 out UBRRH, r16 ldi r16, (1<<URSEL)|(0<<USBS)|(2<<UCSZ0) ;Set frame format: 7data, 1stop bit out UCSRC,r16 ldi r16, (1<<RXEN) ;Enable Receiver and Transmitter out UCSRB,r16 rec: sbis UCSRA,RXC ;ждать загрузки данных в буфер приёмника rjmp rec in r18,UDR ret ************** Раз протокола нет, то вроде бы больше ничего не нужно, но наверное я чего-то не понимаю. Помогите плиз!!! -
ATMega 8535 стыковка с ПК через RS-232
dim_OK ответил dim_OK тема в В помощь начинающему
Так ведь я так иделаю: procedure TForm1.Button1Click(Sender: TObject); begin if not VaComm1.Active then VaComm1.Open; sCMD:='0010010'; Edit1.Text :=sCMD; VaComm1.WriteText(sCMD); end; В МК выталктваю на семисегментник, по идее на должна гореть "5", а горит ноль без сегмента F(т.е. слева вертикальный верхний). -
ATMega 8535 стыковка с ПК через RS-232
dim_OK опубликовал тема в В помощь начинающему
Привет всем А кто писал программу стыковки AVR с ПК, причём для AVR на асм-ре, а для ПК на Делфи? В книжке читаю в примере "отправляем в порт строку 5А 21 00 00 00 00 7А дальше коментируется 5А - стартовый байт" не понимаю, вот этот стартовый байт всегда должен быть 5А или нет, может это конкретный пример (для конкретной проги)? Вот часть кода для проги на Delphi: begin if not VaComm1.Active then VaComm1.Open; sCMD:='5A'+Format(' %2.x',[cmRS]); sum:=$5A+$21; sCMD:=sCMD+' 00 00'; for J:=1 to 128 do begin sum:= sum+I; sCMD:= sCMD+Format(' %.2x',[J]); end; sCMD:= sCMD+A+Format(' %.2x',[12]); sum:= sum+$12; sCMD:=sCMD+Format(' %.2x',[Hi(sum)])+Format(' %.2x',[Lo(sum)]); Edit1.Text :=sCMD; VaComm1.WriteText(sCMD); end; end. Строковая переменная sCMD и есть то что мы передаём на контророллер. Она формируется из стартового байта(5А) и байта команды(cmRS=$21). Непонятно зачем добавляются вот это '00 00'. То что цикл забивает 128 байт цифрами вроде понял, но итересует как вместо цифр забить конкретные данные. Да и вообще как изменить длину слова данных.