Skocz do zawartości

[Minisumo]Dominator


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;
}
}
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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);

}
}
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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

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

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.