|
|
  |
Не могу запрограммировать ATTINY2313 |
|
|
|
Jun 1 2006, 07:38
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(Romanello @ Jun 1 2006, 15:53)  Собрал свой программатор, чтение памяти программ работает, а запись нет, никак не могу понять какую команду надо подавать для программирования (в документации есть команды load programm memory page и write programm memory page) подскажите пожалуйста алгоритм. Дайте, пожалуйста, больше информации: схема, программа... Алгоритм программирования подробно написан в даташите на конкретный МК. А вообще, воспользуйтесь каким-нибудь распространенным и популярным программатором, типа AVReal (информаци по поиску в этом подфоруме). Цитата(redjin @ Jun 1 2006, 16:34)  может компилятор взять с встроенным программатором. Эээтттто как?)))
--------------------
Выбор.
|
|
|
|
|
Jun 1 2006, 08:13
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(redjin @ Jun 1 2006, 17:04)  Цитата(haker_fox @ Jun 1 2006, 11:38)  Цитата(redjin @ Jun 1 2006, 16:34)  может компилятор взять с встроенным программатором.
Эээтттто как?))) ну там codevisionavr например. ИМХО не стоит зависеть от какого-то CodeVision. Нужно взять нормальный программатор и программу для него, желательно с командной строкой. Тогда можно будет воспользоваться компилятором + оболочкой (редактором) и программатором по вкусу, грамотно все это связав между собой.
--------------------
Выбор.
|
|
|
|
|
Jun 1 2006, 09:27
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Цитата(haker_fox @ Jun 1 2006, 12:13)  Цитата(redjin @ Jun 1 2006, 17:04)  Цитата(haker_fox @ Jun 1 2006, 11:38)  Цитата(redjin @ Jun 1 2006, 16:34)  может компилятор взять с встроенным программатором.
Эээтттто как?))) ну там codevisionavr например. ИМХО не стоит зависеть от какого-то CodeVision. Нужно взять нормальный программатор и программу для него, желательно с командной строкой. Тогда можно будет воспользоваться компилятором + оболочкой (редактором) и программатором по вкусу, грамотно все это связав между собой. народ,а чем вам командная строка так люба?Че поменять-лезь в хелп,какой там ключ за что отвечает+ возможные ошибки ввода...Одно из преимуществ Кодвижина-командной строки нет,только чекбоксы. Что в компиляторе,что в программаторе. Студия опять-же из IDE вызывается. Да и чем плохи мастера-вместо ползания по шиту покликал мышкой-инициализация есть. Это не заменяет знание документации-код все равно самому писать,так почему бы от рутины не избавиться. Наверное,я закоренелый лентяй-не люблю лишних движений без необходимости. Да и собственно компилятор-степень оптимизации в последних версиях значительно улучшилась. Да и VMLAB c Протеусом иногда совсем не лишние. З.Ы. Я не AVR123
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Jun 1 2006, 10:05
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334

|
У меня тут завалялся USB программатор с исходниками на Си. Возможно что если изучить их, то можно будет найти ошибку
USB_PROG.zip ( 80 килобайт )
Кол-во скачиваний: 152
--------------------
Всяк хорошая мысля к нам приходит опосля.
|
|
|
|
|
Jun 1 2006, 12:23
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Рабочая процедура записи Tiny2313. Разберетесь при желании ;> fHexManager - содержит массив данных для записи (загруженный Hex) : Код procedure TDuplexDataChannel.UploadHexToATTiny2313; var i : integer; D1, D2, D3, D4 : Byte; ACurrentPage : Integer; APageEnabled : Boolean; APageDone : Boolean;
function GetWordAddress( Address: integer): byte; begin Result := (Address shr 1) and $0F; end;
function GetPageASelector( Address: integer):byte; begin Result := Address shr 9; end;
function GetPageBSelector( Address: integer):byte; begin Result := (Address shr 1) and $ff; end;
function GetPageNumber( Address: Integer):Integer; begin Result := Address div 32; end;
function IsPageEnabled( NumberOfPage : Integer):boolean; var i : Integer; begin Result := false; for i := NumberOfPage * 32 to (NumberOfPage * 32) + 31 do if fHexManager.Cell_Enabled( i ) then Result := True end;
begin fBytesWrote := 0; if fNeedErase then begin // Стираем чип WriteByte( $AC ); WriteByte( $80 ); WriteByte( 0 ); WriteByte( 0 ); sleep( 1000 ); end;
ACurrentPage := -1; APageDone := True;
for i := 0 to $7FF do begin
if fHexManager.Cell_Enabled(i) then D4 := fHexManager.RHex( i ) else D4 := $FF;
if ACurrentPage <> GetPageNumber( i ) then // Необходимо выбрать страницу begin if not APageDone then // finalizing write begin Sleep(10);
WriteByte($4C); // Writing Memory Page WriteByte( GetPageASelector( i-32 ) ); WriteByte( GetPageBSelector( i-32 ) ); WriteByte( 0 ); fCurrentData := '4C ' + IntToHex( GetPageASelector( i-32 ), 2) + ' ' + IntToHex( GetPageBSelector( i-32 ), 2) + ' ' + IntToHex( 0, 2); SendMessage( fOwnerHandle, WM_DAILYDATA, 0,0); Sleep(100); APageDone := True end;
ACurrentPage := GetPageNumber( i ); APageEnabled := IsPageEnabled( GetPageNumber(i) ); if APageEnabled or (not APageDone) then APageDone := False
end;
if APageEnabled then begin // Пишем ячейку // fCurrentAddress := IntToHex( i, 4 ); //D4 := fHexManager.RHex( i ); D1 := $40 or ($8 * (i and 1)); D2 := 0; D3 := GetWordAddress( i ); fCurrentAddress := IntToHex( i, 4 ); fCurrentData := IntToHex( D1, 2) + ' ' + IntToHex( D2, 2) + ' ' + IntToHex( D3, 2) + ' ' + IntToHex( D4, 2); WriteByte( D1 ); WriteByte( D2 ); WriteByte( D3 ); WriteByte( D4 ); inc( fBytesWrote ); Sleep(5); SendMessage( fOwnerHandle, WM_DAILYDATA, 0,0); end end;
WriteFuses(tn2313); WriteLocks(tn2313); end;
|
|
|
|
|
Jun 1 2006, 12:29
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Ну вот еще и я почекрыжил свои исходники  Тут уже яснее некуда . BYTE_OUT = "10101100" ;Разрешение программирования BYTE_OUT = "01010011" BYTE_OUT = "00000000" BYTE_OUT = "00000000" BYTE_OUT = "00110000" ;Запрос инициализации BYTE_OUT = "00000000" BYTE_OUT = "00000010" BYTE_OUT = "00000000" BYTE_OUT = "10101100" ;Комманда стирание кристалла BYTE_OUT = "10000000" BYTE_OUT = "00000000" BYTE_OUT = "00000000" BYTE_OUT = "01000000" ;Загружаем младший байт в страницу BYTE_OUT = "000000zz" ;zz=00 первых 512байт zz=01 вторых 512 байт и т.д. BYTE_OUT = "ХХХХХХХХ" ;адресс слова в странице BYTE_OUT = "YYYYYYYY" ;собственно сам младший байт BYTE_OUT = "01001000" ;Загружаем старший байт в страницу BYTE_OUT = "000000zz" BYTE_OUT = "ХХХХХХХХ" ;адресс слова в странице BYTE_OUT = "YYYYYYYY" ;собственно сам старший байт Грузим страницу 16 словами ,потом BYTE_OUT = "01001100" ;запись страницы BYTE_OUT = "000000zz" BYTE_OUT = "ХХХХХХХХ" ;zz+ХХХХХХХХ адресс записи страницы BYTE_OUT = "YYYYYYYY" ;по барабану    Усе.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|