Я протестировал всю функциональность моей схемы программатора, и многие вещи работают, а некоторые нет.
Кажется, что он стирает все содержимое AT89C4051, но не может успешно запрограммировать чип. На самом деле, кажется, что вообще ничего не запрограммировано.
Это псевдокод, который я использую для программиста:
Clear data (Set address 378h to 0)
Reset counter and enable program mode and wait 100us (Set Control 37Ah to 6)
** At this point, Pin 1=0V which is expected
Raise VPP (Set Control 37Ah to 2)
** Expected 12V at pin 1 but only got 6.8V. Why? I don't know
Raise Step Reset (Set Control 37Ah to 3)
Wait until system ready
Add 10mS delay
Lower Step Reset (Set Control 37Ah to 2)
Wait until system ready
Reset count / lower VPP (Set Control 37Ah to 6)
И для каждого байта:
Set data (Set Control 378h to data)
Wait 100uS
Raise Step Reset (Set Control 37Ah to 1)
Wait until system ready
Wait 2mS
lower Step Reset (Set Control 37Ah to 0)
Wait until system ready
Repeat for remaining bytes
Для справки, «сброс шага повышения» означает, что вывод 4017 IC установлен на высокий уровень, а «сброс шага более низкого уровня» означает, что вывод сброса установлен на низкий уровень. Как только он упадет до низкого уровня, разрешение программирования будет оставаться низким, по крайней мере, в течение 1/2 времени, определенного схемой таймера 555, затем оно будет повышено, затем, после того, как часы начнут пульсировать, система будет готова.
Почти все работает, но есть
ОДНА ОСНОВНАЯ ПРОБЛЕМА
Когда я приказал системе поднять напряжение VPP, она это сделала, но странным образом.
Резистор, который я использую между 12 В постоянного тока и RST микро, составляет 100 кОм только потому, что в техническом описании Atmel указано, что максимальный ток программирования составляет 250 мкА . Итак, используя 100K, я использую 12VDC/100K=120uA.
Таким образом, без подключенного микроконтроллера операция будет точной. Прибор показывает очень близко к 12В. Однако, когда я вынул рабочий микроконтроллер из работающей системы, вставил его в эту схему и измерил напряжение после выполнения точно таких же операций, я получил только от 6 до 7 В.
Я посмотрел на другие схемы, и я не видел, чтобы другие использовали резисторы 100K в качестве подтягивающих. На самом деле, я обнаружил, что подтягивающий резистор всего 2,7 кОм в следующей схеме: http://www.oocities.org/dinceraydin/8051/index.html .
Мой вопрос: зачем использовать такой маленький резистор для программирования, когда в руководстве четко указано, что существует верхний предел тока, который может быть обеспечен для VPP?
Должен ли я нарушать эту спецификацию, чтобы программатор работал?
И для справки, это моя схема: диагональная линия посередине — это часть стрелки, а не провода.
ОБНОВЛЯТЬ
Я искал в Интернете и нашел ДРУГУЮ схему программатора, в которой используется резистор LOW VPP (1K).
URL здесь: http://students.uta.edu/rx/rxr5243/projects/prog/
Изображение находится здесь: http://students.uta.edu/rx/rxr5243/projects/prog/schematic.gif
Если ток через резистор составляет 120 мкА, напряжение на нем будет 12 В, а это означает, что вы фактически получите 12–12 В = 0 В на выводе. Этот верхний предел является пределом того, что микроконтроллер будет рисовать, а не пределом того, что должно быть предоставлено.
Происходит то, что микроконтроллер потребляет только 60 мкА или около того, но резистор падает 60 мкА * 100K = 6 В, поэтому выходное напряжение составляет 12 В-6 В = 6 В. Вам нужен подтягивающий резистор гораздо меньшего размера, чтобы максимальный ток программирования не сильно влиял на выходное напряжение.
Если вы используете резистор 2,7 кОм, например, при 250 мкА напряжение на выводе будет 12-(250 мкА * 2,7 кОм) = 11,325 В, что приемлемо.
редактировать: на самом деле, согласно техническому описанию, оно должно быть не менее 11,5 В. Резистор 2,7 кОм (почти наверняка) будет работать, но технически он должен быть (12-11,5)/250 мкА = максимум 2 кОм.
пользователь152879
BeB00
пользователь152879
BeB00
BeB00