Skocz do zawartości

Pomocna odpowiedź

Musiałem chyba coś uwalić bo żaden z tych kodów nie chce działać, albo błąd leży w programie. Jutro (właściwie dzisiaj) będę dalej majstrował 😎

#include <avr/io.h>

#define IR1_PIN (1<<PC0)
#define IR1_ON PORTC &= ~IR1_PIN
#define IR2_PIN (1<<PC1)
#define IR2_ON PORTC &= ~IR2_PIN
#define IR3_PIN (1<<PC2)
#define IR3_ON PORTC &= ~IR3_PIN
#define IR4_PIN (1<<PC3)
#define IR4_ON PORTC &= ~IR4_PIN

int main(void){

TCCR2 |= _BV(WGM21) | _BV(WGM20); //Fast PWM
TCCR2 |= _BV(CS21); //Preskaler 8
TCCR2 |= _BV(COM21); //Clear OC2 on compare match, set OC2 at BOTTOM, (non-inverting mode) 
TCNT2 = 56; //36 Khz

DDRC |= 0xFF;
DDRD |= 0xFF;

while (1) {
   IR1_ON;
IR2_ON;
IR3_ON;
IR4_ON;
}
}

Ja zepsułem tranzystor, więc radzę Ci sprawdzić miernikiem uniwersalnym określone tranzystory - otwierasz programowo tranzystor, a miernikiem sprawdzasz czy przewodzi, jeśli przewodzi wyłączasz zasilanie i sprawdzasz czy dalej przewodzi - jeśli przewodzi bez zasilania znaczy że jest zepsuty albo gdzieś masz zwarcie. Jeśli nie przewodzi po odłączeniu zasilania a po podłączeniu przewodzi - raczej działa. To jest mój sposób - według mnie działa bo dzięki niemu znalazłem dwa zepsute tranzystory 😉

  • Lubię! 1

Tranzystory sprawne, diody sprawne, przejście między płytkami jest, zwarć nie ma czyli program.

Na tranzystorze NPN (Pin PD7) podaje 36 KHZ, na PNP (PC0,PC1,PC2,PC3) załącza diody podając stan wysoki na tranzystor.

Daj jakiś delay, bo przecież w aktualnej chwili każda dioda świeci przez tak krótki czas, że nie jesteś w stanie tego zauważyć.

Tutaj już bardziej chodzi o paczkowanie impulsów. TSOP'y blokują się jeśli dostają za wiele impulsów (a raczej jeśli dostają je w zbyt małych odstępach czasowych), dlatego wysyła się paczki impulsów i daje się mu "odpocząć". Musisz poszukać w nocie twojego odbiornika jaki dla niego jest ów ważny parametr.

  • Lubię! 1

Proszę o sprawdzenie programu bo to chyba w nim tkwi cały problem.Chyba znalazłem za chwile się okaże 👹😅

#include <avr/io.h>
#include <util/delay.h>

#define IR1_PIN (1<<PC0)
#define IR1_ON PORTC &= ~IR1_PIN
#define IR2_PIN (1<<PC1)
#define IR2_ON PORTC &= ~IR2_PIN
#define IR3_PIN (1<<PC2)
#define IR3_ON PORTC &= ~IR3_PIN
#define IR4_PIN (1<<PC3)
#define IR4_ON PORTC &= ~IR4_PIN

int main(void){

   TCCR2 |= _BV(WGM21); //CTC
   TCCR2 |= _BV(CS21); //Preskaler 8
   //TCCR2 |= _BV(COM20); //Toogle OC2 on Compare Match
   OCR2 = 56; //36 Khz

   DDRC |= 0xFF;
   DDRD |= 0xFF;

   while (1) {
   IR1_ON;
_delay_ms(500);
   IR2_ON;
_delay_ms(500);
   IR3_ON;
_delay_ms(500);
   IR4_ON;
   }
}

piotreks-89, Co do paczkowania to z tym nie powinno być problemu, jak na razie chce odpalić te diody.

Jaki mikrokontroler? Może JTAG w fusebitach włączony?

OK, zobaczyłem schemat na poprzedniej stronie - na 99% wina leży po stronie tego fusebitu 🙂

  • Lubię! 1
  • 5 tygodnie później...

Wymieniłem tranzystory, poprawiłem niektóre luty także raczej wykluczam błąd sprzętowy.

Dodam, że na diodach nie ma praktycznie napięcia. 👹🙁

To co zostało to oprogramowanie:

#include <avr/io.h>
#include <util/delay.h>

#define IR1_ON PORTC |= (1<<PC0);
#define IR2_ON PORTC |= (1<<PC1);
#define IR3_ON PORTC |= (1<<PC2);
#define IR4_ON PORTC |= (1<<PC3);

int main(void) {

TCCR2 |= _BV(WGM20) | _BV(WGM21); //Fast PWM
TCCR2 |= _BV(CS21); //Preskaler 8
TCCR2 |= _BV(COM21); //Clear OC2 on compare match, set OC2 at BOTTOM, (non-inverting mode)
OCR2 = 28; //OCR2 = 28; 36KHZ; Zegar Atmegi na 8 MHZ

DDRC |= 0xff;
DDRD |= 0xff;

while (1) {

	IR1_ON
	_delay_ms(1000);
	IR2_ON
	_delay_ms(1000);
	IR3_ON
	_delay_ms(1000);
	IR4_ON
	_delay_ms(1000);

}
}

Jakie masz taktowanie ? W programie tego nie ma. U mnie też z początku nie działało, ale po wymianie tranzystorów z bc 807 na bc 817 zadziałało. ( spróbuj tego z jednym tranzystorem ). Pamiętaj również o tym że montujesz tylko rezystory 1k na bazę i 51r między tranzystorem i diodą (100k nie montuj)

Program ma po prostu je kolejno zapalać i czekać 1s ?

EDIT: Jak na diodach jest nikłe napięcie spróbuj opcji z tranzystorem bc817 (sam tak miałem)

  • Lubię! 1

Tak program ma tylko zapalić te diody.Taktowanie 8Mhz, jest ustawione w makefile.

Sposób z BC817 wypróbuje jutro - koniec zapasów 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...