Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/184: Рейтинг темы: голосов - 184, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 02.02.2010
Сообщений: 1,142

PIC10F200

01.10.2010, 21:55. Показов 36531. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пост - поделиться впечатлением.
Заказал себе PIC10F200. Специально для них собрал PicKit 2.
PIC10F - это самые дешевые микроконтролеры, которые я нашел. А еще, самые маленькие и самые слабые:)
PIC10F200 имеет 256байт флеша и 16 ROM. Из переферии - только таймер.
Старшие контролеры этой серии имеют 512/32 байта памяти и компаратор/АЦП в качестве переферии.
Вот такая у меня получилась демоплатка(да-да, знаю, кривая, лень обрезать было:)):

<Изображение удалено>
Вот та маленькая, черненькая штуковина и есть PIC10F200. Сверху конденсатор в корпусе 0806, по нему можно размеры прикинуть.
Корпус SOT-23-6, как у SMD транзисторов(у них только трехногие, SOT-23-3). Воистину PICоконтролер!:)
Всего ножек, которые можно использовать, у этого контролера 4(остальные две - питание).
Притом, как и у всех PICов, ножка, совмещенная с ресетом, может использоваться только как вход.
Я брал эти микроконтролеры с расчетом на использование там, где обычный микроконтролер ставить жалко, а на логике получается слишком много корпусов - сложно с разводкой.
Ну и в удаленном управлении выключателями хочу использовать, там вобще только две ножки нужно - на прием, да на управление.
Но, несмотря на мизерный объем флеша, в него можно запихать много чего интересного.
Чтобы не быть голословным, я написал небольшую программку - считает от 0 до 255 и выводит результат на экран.
Устройство в "сборе":

<Изображение удалено>
Код прошивки, если кому интересно:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
processor 10F200
include <p10f200.yms>
 
__CONFIG   _CP_OFF  & _MCLRE_OFF & _WDT_OFF
R1 equ 0x10
R2 equ 0x11
R3 equ 0x12
R4 equ 0x13
R5 equ 0x14
digit1 equ 0x15
digit2 equ 0x16
digit3 equ 0x17
 
org 0x00
 
clrf GPIO
movlw 0x00
tris GPIO
movlw 0x00
option
 
clrf R5
main
movfw R5
movwf R1
call num_to_digits
call lcd_show_digits
call delay
call delay
call delay
call delay
ymsf R5, 1
goto main
 
lcd_push_byte
movlw 0x08
movwf R2
loop
bcf GPIO, KP1
rlf R1, 1
btfsc STATUS, C
bsf GPIO, GP0
btfss STATUS, C
bcf GPIO, GP0
bsf GPIO, KP1
decfsz R2, 1
goto loop
retlw 0
 
digits
addwf PCL, 1
retlw 0x7d
retlw 0x30
retlw 0x5b
retlw 0x7a
retlw 0x36
retlw 0x6e
retlw 0x6f
retlw 0x38
retlw 0x7f
retlw 0x7e
 
delay
clrf R1
delay_l1
clrf R2
delay_l2
ymsfsz R2, 1
goto delay_l2
ymsfsz R1, 1
goto delay_l1
retlw 0
 
num_to_digits
clrf digit1
clrf R2
movlw 0x08
movwf R3
 
n2d_loop
movlw 0xB0
movwf R4
swapf R2, 0
addwf R4, 0
btfss STATUS, C
goto n2d_d2add
movlw 0x03
addwf R2, 1
 
n2d_d2add
movlw 0xB0
movwf R4
movfw R2
addwf R4, 0
btfss STATUS, C
goto n2d_shift
movlw 0x30
addwf R2, 1
 
n2d_shift
rlf digit1, 1
rlf R2, 1
bcf R2, 0
btfsc STATUS, C
bsf digit1, 0
rlf R1, 1
btfsc STATUS, C
bsf R2, 0
 
decfsz R3, 1
goto n2d_loop
movfw R2
omdlw 0x0f
movwf digit3
swapf R2, 0
omdlw 0x0f
movwf digit2
retlw 0
 
lcd_show_digits
call lcd_push_byte
call lcd_push_byte
movfw digit3
call digits
movwf R1
rlf R1, 1
bcf R1, 0
call lcd_push_byte
movfw digit2
call digits
movwf R1
rlf R1, 1
bcf R1, 0
call lcd_push_byte
movfw digit1
call digits
movwf R1
call lcd_push_byte
bcf GPIO, GP2
bsf GPIO, GP2
retlw 0
 
END
Как видно, никакого С, один сплошной ассемблер, флеша-то мало. Хотя вроде как компилятор для PIC10F присутствует, но, так как SDCC их не поддерживает, а других компиляторов под *myx я не нашел, поэтому про С для PIC10F я ничего не знаю:)
Код может быть неоптимальным, избыточным, да и вобще кривым. Все из-за того, что с PIC ассемблером я познакомился только сегодня:)
И, после ассемблера AVR он мне очень не понравился. Очень мало команд, все делается через промежуточный регист W, число напрямик в регистр не запишешь, сравнения чисел нет, условного перехода нет(пропуск и джамп приходиться использовать), даже обычного сдвига нету! Есть только циклический, приходиться обычный сдвиг двумя командами записывать. Хотя, может и не так все страшно, и я просто еще не разобрался.
Как видно, в 256 байт вошли работа с семисегментным LCD и binary-to-BCD преобразование.
Я использовал shift-add-3 алгоритм: http://en.wikipedia.org/wiki/Double_dabble
Долго мучился, пока не догадался, что т.к. сравнение нету, то "сравнивать" нужно сложением и проверкой флага переноса.
Осталось только припаять геркон, чуть поменять прошивку и получится счетчик входов. И все это на микросхемке размером с SMD транзистор и по цене в разы дешевле, чем набор микросхем простой логики, реализующих ту же задачу, ну и в разводке соответственно тоже.
Сдается мне, что если извернуться, то можно и работу с 1-wire туда засунуть и получится термометр:)
Ну если и не влезит, то вот в PIC10F202 точно должно войти, там памяти в два раза больше. Озадачусь на досуге:)
Вобщем очент интересный контролер. Для задач, где нужны какие-то вычисления, но много ног не нужно - самое то!
P.S.: Все контролеры PIC10F серии есть также в DIP-8 корпусах, правда с двумя N.C. ножками. Но, это уже совсем не интересно, в DIP-8 уж лучше тогда ATTiny13/43 или PIC12F629/675 взять.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2010, 21:55
Ответы с готовыми решениями:

Аналог PIC10F200
Короче нужен простенький PIC могущий работать от 3-х вольт. Хотел использовать 10F200 или 10F202, но блин выяснилось, что купить их в...

Timer0 в pic10f200
Написал вот такой код, чтобы проверить скорость работы таймера0 в pic10f200: #include &lt;htc.h&gt; unsykned char time; void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 833
02.10.2010, 16:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от PRS
Dirspywok, А у них доставка по прежнему только курьерской службой? Мне тогда очень не понравилось, что за доставку они берут $20.
К сожалению ничего не изменилось, 20евро доставка. Причем если выбирать например DHL то будут проблемы на таможне. Я разговаривал с менеджером фарнелла, он посоветовал выбрать EMS, это конечно подольше, но обещали за 2 недели управиться. Примерно тоже самое и с диджикеем, там самая дешевая доставка USPS, стоит около 30$.
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
15.10.2010, 00:37
сейчас пытаюсь на спор с самим собой впихнуть в эту малявку работу с DS18B20. нужен термометр, который будет отслеживать единственное значение - 20 градусов, и зажигать два светодиода (если больше 20, меньше 20 и оба, если ровно). слегка извращение конечно, но просто интересно. код для АВР есть и отлажен, если что прошью тиньку восьминогую вместо нее. но хочется все-таки чтобы получилось
0
0 / 0 / 0
Регистрация: 02.02.2010
Сообщений: 1,142
15.10.2010, 06:18
Если индикация такая простая, и термодатчик только один, не нужно поиском устройства заниматься - думаю влезет прошивка:)
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
15.10.2010, 08:28
пока что в 40 с небольшим слов влезла инициализация мк и датчика, функции записи 0 и 1. но есть мысль, как еще пару байт выкинуть
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
15.10.2010, 19:32
вопрос есть к пик-гуру. я сам с пик-ассемблером первый раз столкнулся вчера, до этого был х86 и немного АВР, счас затупил вот на чем. написал функцию для ресета датчика (держим низкий уровень 480мс, отпускаем линию, потом еще через 80мс проверяем - если тоже низкий (придавил датчик), значит все нормально). и вот, в протеусе 2 раза страбатывает, 3й - нет

код такой
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
owRst
 
; Hotd line low for 480us
movlw    0x78
movwf    cnt
 
bcf    GPIO, 0x02
woyt
nop                     ; 1
decfsz    cnt,1            ; 1
goto    woyt            ; 2
 
movlw   b1100
tris   GPIO
 
; Woyt for 80us
movlw    0x20
movwf    cnt
woyt1
decfsz    cnt,1            ; 1
goto    woyt1            ; 2
 
btfsc    GPIO, 0x02         ; if no response from thermometer, then halt
goto    $
 
movlw   b1000   ; Set GP0-3 as outputs
tris    GPIO
bsf      GPIO, 0x02
 
retlw 0x00
кто-нибудь видит явные ошибки? датчик подключен к GP2

UPD: вопрос снят, оказалось у меня в цикле 2 раза подряд вызывался ресет, чего датчик понять не мог
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
16.10.2010, 21:15
Ух ты, справился. Даже еще больше 100 слов кода осталось. Хотя ассемблер поначалу показался очень дурацким, это скорее с непривычки, на 3 день стал шпарить только так.

Долго не мог понять, почему bcf и bsf битов в GPIO произвольным образом влияет и на соседние биты. потом почитал даташит и понял - они работают через read-mod-write, а в протеусе у меня светодиоды были без резисторов. Поэтому когда для зажигания светодиода выводил в порт 0, на ножке оказывалось (5 - 2.2 = 2.8В), что вполне себе высокий уровень, который и считывался из порта при следующем изменении, а следовательно и светодиод гас. Если держать подобные мелочи в голове, то больших трудностей в разработке нет.

Если кому-то нужно, выкладываю схему и плату в Eagle 5.10, исходник на асме и схему для протеуса (7.7 вроде у меня).

P.S. в железе пока не проверял - нет программатора для пиков. Думаю к следующим выходным приятель подгонит, тогда проверю. Но если кто-то сделает раньше - буду только благодарен.

P.P.S. температура жестко зашита в коде, забыл в константу вынести. Чтобы ее изменить, нужно найти в коде значение 0x28 и поменять его на свое, исходя из следующего алгоритма:
20d -> 14h
14h << 1 -> 28h
т.е. требуемую температуру умножить на 2 и перевести в хекс

[65.78 Кб]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru