| Автор |
Съобщение |
|
ïîìîù
|
 ïîìîù
Íàïèñàõ òàçè ïðîãðàìêà è ÿ èçïðîáâàõ íà protåus ( ðàáîòè íîðìàëíî), íî êîãàòî ÿ ïðîáâàõ ñ èñòèíñêè ÏÈÊ, íåùàòà íå ñòîÿõà òî÷íî òàêà. Îòíà÷àëî òðúãíà êàêòî òðÿáâà, íî êîãàòî çàïî÷íàõ äà èçïúëíÿâàì îòäåëíèòå îïåðàöèè ãè èçïúëíè âåäíúæ è ñÿêàø ÇÀÁÈ (íèùî íå ùå äà ïðàâè). Íåçàâèñèìî äàëè ìó ñïèðàì çàõðàíâàíåòî íåùå äà îòëåïè? Ïîìèñëèõ ñè ÷å íåùî íå å íàðåä ÏÈÊÀ, íî ãî ïðîáâàõ è ñ äðóãè ïðîãðàìè è ñè ðàáîòè!
#include <16F84A.H>
#fuses XT,NOWDT,PUT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
main(){
int i;
set_tris_a(0b11110);
set_tris_b(0b00001110);
ON_OFF:
i=1;
while(i){
delay_ms(10);
if(input(PIN_A1)==0x1){
i--;}}
i=25;
while(i){
delay_ms(1000);
i--;
if(input(PIN_A1)==0x0){
goto ON_OFF;}}
D:
i=1;
while(i){
if(input(PIN_B1)==0x1){
i--;}
else if(input(PIN_B2)==0x1){
i--;}
else if(input(PIN_B3)==0x1){
i--;}}
i=15;
if(input(PIN_A2)==0x1){
while(i){
delay_ms(1000);
i--;
if(input(PIN_A1)==0x0){
goto ON_OFF;}}}
i=20;
if(input(PIN_A3)==0x1){
while(i){
delay_ms(1000);
i--;
if(input(PIN_A1)==0x0){
goto ON_OFF;}}}
i=25;
if(input(PIN_A4)==0x1){
while(i){
delay_ms(1000);
i--;
if(input(PIN_A1)==0x0){
goto ON_OFF;}}}
{
output_high(PIN_B4);
delay_ms(10);
output_high(PIN_B5);
delay_ms(10);
output_high(PIN_B6);}
i=180;
while(i){
delay_ms(1000);
i--;
if(input(PIN_A1)==0x0){
output_low(PIN_B4);
delay_ms(10);
output_low(PIN_B5);
delay_ms(10);
output_low(PIN_B6);
goto ON_OFF;}}
{
output_low(PIN_B4);
delay_ms(10);
output_low(PIN_B5);
delay_ms(10);
output_low(PIN_B6);}
goto D;
}
|
| Сря Май 18, 2005 11:38 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
 тези while(i) са много интересно писани. Аз ли съм пропуснал нещо или... Каква е логиката от int i=1; while(i) { bla bla bla... i--; } и въобще за първи път виждам такава реализация. Ще изкоментират ли напредналите, има ли някакъв трик тук...
|
| Сря Май 18, 2005 1:33 pm |
|
 |
|
ïîìîù
|
Ìîæå ðåàëèçàöèÿòà äà å ñòðàííà, íî ïðîãðàìàòà ñå å ïðàâèëíà è ñïîðåä ñèìóëàòîðà íàèñòèíà ðàáîòè, íî íàïðàêòèêà ñ ðåàëåí ïèê íåùî íå å íàðåä. Ëîãè÷åñêè ïîãëåäíàòî íå âèæäàì ïðîáëåìè!!! 
|
| Сря Май 18, 2005 2:11 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Има логика в това while(i) само ако някакъв фонов процес ( ISR ) промени i. Иначе while(1) е къде къде по-разбираемо написано.
|
| Сря Май 18, 2005 2:26 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Тоя спагети код си изглежда работещ....кажи кво имаш по портовете? Аз това мога да си го обясня единствено с хардуерна грешка....преди време ми се наложи заради точно такъв проблем да добавям по 4.7V ценери на едни 40 входа  Искам да кажа, че ако подадеш отрицателно напрежение, или нещо по-високо от 5V става такова нещо, PIC-a отива незнайно къде...
|
| Сря Май 18, 2005 3:00 pm |
|
 |
|
ïîìîù
|
Àìè öÿëàòà ìè ñõåìà å çàõðàíåíà ñ òî÷íî 5V è ïî ïîðòîâåòå îñâåí 0V èëè 5V äðóãî íÿìà! 
|
| Сря Май 18, 2005 6:24 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Като споменаваш портовете, да не взимаш захранване от ПЦ-то. Защото ако е така, мисля че няма да навреди да измериш колко точно.
|
| Сря Май 18, 2005 6:30 pm |
|
 |
|
ïîìîù
|
Çíà÷è ....... ñõåìàòà íà óñòðîéñòâîòî â ìîìåíòà ñå çàõðàíâà îò ðåãîëðóåì ñòàáèëèçàòîð è òàì ïðîáëåìè ñ íàïðåæåíèåòî íå ìîæå äà èìà. Ùî ñå îòíàñÿ äî ïðîãðàìàòîðà, àç ñúì JDM è çàõðàíâàíåòî ìè ñå ïîäàâà îò ÏÖ-òî. Íî íå ìèñëÿ ÷å òîâà å ïðîáëåìà çàùîòî ñúùîòî ÏÈÊ×Å ñúì ïîäêàðâàë äðóãè ïðîãðàìè íà ñúùèÿ ïðîãðàìàòîð. Ñîôòóåðà ìè å IC-Prog.
|
| Сря Май 18, 2005 6:46 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Абе я обясни какво прави тази програма...на мен на цветомузика ми прилича 
|
| Сря Май 18, 2005 7:37 pm |
|
 |
|
ïîìîù
|
Îò êîäà ìè ñå âèæäà, ÷å ñúì íà÷èíàåù. Òà ñè ïðàâÿ åäíà äîìàøíà àëàðìè÷êà è òÿ èçãëåæäà òàêà:
|
| Сря Май 18, 2005 8:08 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Хе, къде живееш...такоз де, ако очакваш тая алармичка да те опази...Ако и платаката си сглобил както схемата...  Майтапа настрани, ето ти мое решение...понеже не мога по друг начин да ти обясня колко е разхвърляно при тебе 
|
| Чет Май 19, 2005 2:13 am |
|
 |
|
ïîìîù
|
Õèùíèê, áëàãîäàðÿ çà ñõåìàòà! Íå ñå îáèæäàé, íî íå âèæäàì çàùî ìîÿò ïðîåêò äà íå òå ïàçè, àêî ñîðñà ðàáîòåøå òîëêàâà äîáðå êîëêîòî íà ñèìóëàòîðà, âñå ïàê àç ñúì íà÷èíàåù ñ ìèêðîêîíòðîëåðèòå è êîãàòî òè âèäÿõ ñîðñ êîäà ðàçáðàõ êîëêî ìíîãî èìàì äà ó÷à, çà äà ìîãà äà ãè ïðîãðàìèðàì êàòî õîðàòà. Íåâèæäàì ïðîáëåì ïî ñõåìàòà ìè, âñå ïàê òîâà å ñàìî íàõâúðëÿíî è íå å öÿëàòà (äà íå ñè ñè ïîìèñëèë äðóãî  ), ñìåÿ äà òâúðäÿ ÷å ðàçáèðàì äîñòà îò åëåêòðîíèêà è äà òè êàæà êúäå æèâåÿ òîâà íÿìà äà òè ïîìîãíå  . Ïðîáëåìúò ìè å ñàìî ïðîãðàìèðàíåòî  .
Ïàê áëàãîäàðÿ!
|
| Чет Май 19, 2005 12:21 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Аз нали затова ти написах това (не че и то не е разхвърляно), исках да видиш как като подредиш малко по-лесно се ориентираш къде може да възникне проблем. Схвана ли как работи схемата?
|
| Чет Май 19, 2005 12:23 pm |
|
 |
|
ïîìîù
|
Äà, â îáùè ëèíèè ãî ñõâàíàõ, íî ìèñëÿ ÷å è íÿêîå äðóãî îáÿñíåíèå ùå ìè äîéäå äîáðå. Ìàé å âðåìå äà ñå ðåãàñòðèðàì 
|
| Чет Май 19, 2005 12:41 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
void init_ports(); // Стандартна за моите програми
int1 sensors_scan(); // Функция, която връща 1 ако някой бутон (датчик) е активиран
void Flash_GREEN(int8 count); // Мигане на зелено за 500мс count пъти
void Flash_RED(int8 count); // Мигане на червено за 500мс count пъти
int8 Get_Option_Time(); // Четене на трите ключа за настройка на време
Може да има няколко бъга, все пак е писано за 15-ина минути. За подобрения може да сложиш функция, която да сканира дали са прекъснати кабелите на четерите датчика. Зареждаш кондензаторите (те стоят от страната на датчиците а не на платката с алармата) , проверяваш дали са 1....ако не са 1 значи някой им е отрязал саксиите. Може и да запаметяваш в EEPROM-а състоянието на алармата...аве ти си решаваш...за мен това си е една тренировка, колкото да не забравям какво е PIC16F84...
|
| Чет Май 19, 2005 4:44 pm |
|
|