Почему VPP не 12V с безопасным резистором, когда в эту цепь вставлен рабочий микроконтроллер?

Я протестировал всю функциональность моей схемы программатора, и многие вещи работают, а некоторые нет.

Кажется, что он стирает все содержимое 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 .

Blowit-программист

Мой вопрос: зачем использовать такой маленький резистор для программирования, когда в руководстве четко указано, что существует верхний предел тока, который может быть обеспечен для VPP?

Должен ли я нарушать эту спецификацию, чтобы программатор работал?

И для справки, это моя схема: диагональная линия посередине — это часть стрелки, а не провода.схема

ОБНОВЛЯТЬ

Я искал в Интернете и нашел ДРУГУЮ схему программатора, в которой используется резистор LOW VPP (1K).

URL здесь: http://students.uta.edu/rx/rxr5243/projects/prog/

Изображение находится здесь: http://students.uta.edu/rx/rxr5243/projects/prog/schematic.gif

Ответы (1)

Если ток через резистор составляет 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 кОм.

Хорошо, тогда тому, кто написал таблицу данных, нужна помощь, потому что они должны были поместить эти 250 мкА в столбец MIN, а не в столбец MAX. Хорошо, я попробую вместо этого резистор 2,2K, так как у меня их много.
Нет, даташит правильный. 250 мкА - это максимальный ток, потребляемый микроконтроллером.
Это вводит меня в заблуждение, потому что они назвали его «максимальный ток включения». Они должны были назвать это «максимальный ток, потребляемый микросхемой».
Спецификации обычно предполагают минимальный уровень знаний в области электроники. Если бы они должны были включать весь контекст, каждый лист данных был бы длиной в сотни или тысячи страниц. Знание в этом случае состоит в том, что вы не можете заставить вход потреблять больше тока, чем он «хочет», поэтому любое ограничение тока явно является ограничением того, что он потребляет (это немного сложнее, чем это, но это в значительной степени подводит итог). Это та же причина, по которой блоки питания имеют маркировку 1A. Это не значит, что они постоянно выдают 1А, это просто предел того, что они могут выдать.
Кроме того, если вы хотите ограничить ток при стабильном напряжении, вы бы этого не сделали. Если бы вы реализовали правильную систему ограничения тока при постоянном напряжении, все бы по-прежнему работало (хотя в этом не было бы необходимости).