| Автор |
Съобщение |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
 Опит за шим...
Зд
от доста време се инатя с тоя ШИМ
успях да си го подкарам на протеус без проблем ... но до там ако можете да кажете каде спроред вас е проблема ???
/кръстил съм проекта proba защото вече имаше 6im/
proba.c
proba.h
предварително благодаря на всеки който поне се опита да ми помогне
вече съм отчаян....
|
| Вто Дек 23, 2008 11:02 pm |
|
 |
|
optron
Ранг: Ориентиран
Регистриран на: Чет Ное 20, 2008 1:49 pm Мнения: 276 Местоположение: Бургас
|
Точно тоя чип е проблемен.
Първо си активирай таймера при включване - спестява доста главоболия. Като допълнително подсигуряване си сложи софтуерно закъснение от примерно четвърт секунда преди да сетваш регистрите. Също, след като изтече това закъснение и сетнеш ТРИС-овете, направи едно четене на входовете, за да се изравнят буфериращите регистри в логиката.
Просто не ме питай как с такова нещо подкарах контролер за дизелов генератор. 
_________________ Digitally yours: Optron
|
| Сря Дек 24, 2008 1:02 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
кода е уникален
ето на това му викам ифовщина 
|
| Сря Дек 24, 2008 9:41 am |
|
 |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
ок
успях да си направя сега 6те видим дали 6те стане...
edit
ПАК НЕ СТАВА
. как се задават porta i trisa в ccs
|
| Сря Дек 24, 2008 1:06 pm |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
set_tris_a (value)
value = input_a()
output_a (value)
Има си help, чети го
|
| Сря Дек 24, 2008 1:19 pm |
|
 |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
трасих trist ама от де да знам 4е се задава със set
|
| Сря Дек 24, 2008 4:07 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
сигурно не знаеш и за буквите Ч, Ш, ... 
|
| Сря Дек 24, 2008 4:30 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Малко не вдявам каква е идеята тук, вместо тия ифове може да позлваш case. Инче ШИМ е просто нещо, приметно изцяло софтуерен без позлване на таймер, да речем честота 100 хц
#bit out =06.1;
int set, pwm;
out=1;
while(1)
{
if(pwm < 100)
{
if(pwm==set)
{
out=0;
}
pwm++;
}
else
{
pwm =0;
out = 1;
}
delay_ms(10);
}
общо взето е това, порт B.0 ще т е изхода на PWM-а, а set определя заплването от 0- 100.
|
| Сря Дек 24, 2008 10:05 pm |
|
 |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
тва ок
аз бях решил с 2 пина от а порта да мога да оправлявам каква да е дължината на импулса т.е. а0 ми намаля дължината а а1 ми е увеличава
та да питам за да може целият "а" порт да ми е вход а "б" изход така ли трябва да ми е трис-а
SET_TRIS_A(0x0F);
SET_TRIS_B(0x00);
п.п.
ето това ми е програмата казвайте ако има грешки !
|
| Пон Дек 29, 2008 1:17 am |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
SET_TRIS_A(0xFF);
SET_TRIS_B(0x00);
|
| Пон Дек 29, 2008 2:15 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
"оправлява" и още ......
Спасе това може да означава само че си доста тъпо парче. Изобщо не знам що колегите си губят времето да ти помагат. Ама и то от акъл.
|
| Пон Дек 29, 2008 10:59 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Zeus ти го е написал, но по този начин на писане нема стигнеш далеч. В най-общия случай е това което си написал, ама все оюе не схващам що не позлваш case което е доста по прегледно. После по този начин написан ШИМ е доста непостоянен, дори по непостонен от изцяло софтуерния който съм ти написал аз, и на послендо място, идеята да управляваш еидн бит по този начин, е меко казано глупава. Така променяш целия порт В, а на теб ти трябва само еидн пин, има си както команда за сетване на бит, така можеш и директно да манипулираш бита, = false/ true = 0/1 .... Ако ще правиш някакви операции с целия порт е по добре да позлваш AND и OR команди, примерно & 0хFE за да стане 0 и || 0x01 за да стане 1, така няма да променяш състоянието на всики останали пинове по порта.
п.с. Ники, сигурно сме мазахости, или пък тъпи мазохисти ...  знайш ли , може да стане човек.
|
| Пон Дек 29, 2008 7:13 pm |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
Прав си ToHu, че това е доста кофти начин за реализация на ШИМ. Но не забравям, че в началото и аз имах проблем със софтуерната му реализация и този форум доста ми помогна. Отворих едни мой стар проект със 18F88 и малко го паснах, понеже беше за 8 ШИМ-а.
#include <16F84a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=4000000)
#bit p1=0x06.0 // PORTB най младшия бит, на него ще ти излиза ШИМ
int x; // продължителност на положителния фронт на импулса
int y; // продължителност на нулев фронт на импулса
#int_TIMER0
void clock_isr()
{
disable_interrupts(INT_TIMER0);
if(y>x) p1=0;
if(y++>254)
{
y=0;
if(x>0) p1=1;
};
set_timer0(200); //честота на импулсите (0 до 255)
//по големи стойности, по-висока честота
enable_interrupts(INT_TIMER0);
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_tris_b(0x00);
y=0;
x=50; //тук задаваш съотношението на фронтовете (1 до 254)
while(true)
{
//тук слагаш твоята програма
};
}
Не съм сигурен за FUSES, понеже нямам време да правя платка да го пробвам. На Протеуса тръгва. Исках просто да схване идеята.
spas92,ако имаш въпроси питай, каквото мога ще ти отговоря. Не се сърди относно забележките на колегите за правописа. Тук са все сериозни хора и тези неща не правят добро впечатление. Ако не си сигурне за правописа на някоя дума, изпозвай Word и FlexWord. И аз някой път го използвам за някой засукани думи, дето не съм сигурен, така че не е срамно.
|
| Пон Дек 29, 2008 9:33 pm |
|
|