Jump to content

Problēma ar LED matricas tranzistoriem.


The Only
 Share

Recommended Posts

Uztaisīju LED matricu bez nekādiem ieteikumiem, bez shēmām, bet neiet :D

 

Pievienoju shēmu kā viss salodēts, un video no

, kur jāiedegas vienai un pēc tam divām LED:

1. solis:

00000

01000

00000

00000

 

2. solis:

00000

11000

00000

00000

 

Rezultāts:

 

1. solis:

00000

01000

00000

00000

 

2. solis:

11000

11000

11000

11000

 

 

Rindas savienotas ar zemi caur NPN tranzistoriem.

Kolonnas savienotas ar +5V caur PNP tranzistoriem.

Kolonnu adresācija strādā, bet rindas nez kāpēc iedegas visas, lai gan uz atmega8 kājiņām ir 0 V (pamērīju ar voltmetru)

 

Cik skatos, tad problēma ir ar NPN tranzistoriem, bet nesaprotu kāda.

post-69370-0-01799600-1337416311_thumb.png

Link to comment
Share on other sites

katram tranzistoram bāzē petestību. Nerēķinot (negribu!) bet uz čuju 5 -10 kiloomi.

Lai iedegtos LED1 uz Q5 bāzi LOG0 un uz Q1 LOG1 iedod.

Kamēr uz Q5-Q9 bāzēm ir LOG1 tikmēr tie ir aizvērti un stāva neplūdīs. Savukārt kamer uz Q1-Q4 bāzēm ir LOG0 tikmēr caur šamiem strāva nepludīs. Tālāk pats eksperimentē un programmē.

Labots - JDat
Link to comment
Share on other sites

The Only

katram tranzistoram bāzē petestību. Nerēķinot (negribu!) bet uz čuju 5 -10 kiloomi.

Lai iedegtos LED1 uz Q5 bāzi LOG0 un uz Q1 LOG1 iedod.

Kamēr uz Q5-Q9 bāzēm ir LOG1 tikmēr tie ir aizvērti un stāva neplūdīs. Savukārt kamer uz Q1-Q4 bāzēm ir LOG0 tikmēr caur šamiem strāva nepludīs. Tālāk pats eksperimentē un programmē.

 

Atvainojos par neprecizitāti shēmā, bet katram tranzistoram pie bāzes jau ir 10k omu pretestība.

Link to comment
Share on other sites

The Only

Samēģināji? Sanāca?

 

Tranzistori bija jau vietā, kad es filmēju šo kļūdu.

Link to comment
Share on other sites

Tranzistori bija jau vietā, kad es filmēju šo kļūdu.

 

Atvainojiet, bet es nasaprotu Jūsu runas stilu.

 

Neesmu elektronikas speciālists. Zinu tikai pamatus. Paskatīsimies uz tavu shēmu. Kā strādā tranzistors? Ja uz bāzes ir lielāks spriegums ne kā uz emitera tad tranzistors ir vaļā.

 

Ko tas nozīmē tavā gadījumā? Q5 ir PNP tranzistors. Emiters pieslēgts pie +5V. Ja uz bāzes būs mazāk par +5 V (0V; LOG0) tad tranzistors atvērsies. un caur to sāks plūst strāva. Q1 ir NPN tranzistors. Emiters pieslēgts pie GND (o voltiem). Ja uz Bāzes iesos spriegumu (5V; LOG1), tad tranzistors atvērsies un caur to sāks plūst strāva. Skaidrojums uz pirkstiem bez zinātnes un formulām... Skaidrojums peciāli pieskaņots tabai shēmai.

 

Ja gribi tumšumu tad uz visām PNP tranzistoru bāzēsm iedod LOG1 un uz visām NPN bāzēm iedod LOG0. Sauksim to par izejas stāvokli. Tad sāc mainīt LOG signālus uz pretējiem vajadzīgo tranzistoru bāzēm. Tik tālu skaidrs?

Labots - JDat
Link to comment
Share on other sites

The Only
(labots)

Tik tālu jau es pats saprotu, programmas kodā viss ir tā kā Tu skaidroji. Programmu uzrakstīju tieši tā, lai uz PNP dod LOG0 un NPN LOG1, lai iedegtos. 1. solis viss viss kārtībā, bet 2. solī kļūda un nez kāpēc nostrādā visi NPN tranzistori, lai gan uz bāzes ir LOG0.

Par tranzistoriem itkā zinu visu, ko vajadzētu šajā gadījumā. Pievienoju arī lodējuma attēlu. Plus lejā vienkāršais kods

 

Es vēlējos, lai būtu šādi (1 apzīmē, ka deg, 0 nedeg LED):

1. solis:

00000

01000

00000

00000

 

2. solis:

00000

11000

00000

00000

 

Bet rezultātā šādi (kā video redzams):

1. solis:

00000

01000

00000

00000

 

2. solis:

11000

11000

11000

11000

 

 

#ifndef F_CPU

#define F_CPU 1000000UL // 1Mhz frekvence

#endif

 

#include <avr/io.h>

#include <util/delay.h>

volatile uint8_t i, j;

 

void ioinit()

{

DDRC = 0x1F;

DDRD = 0x0F;

}

 

int main(void)

{

ioinit();

while(1)

{

PORTC = 0b00011101; // domats 5 PNP

PORTD = 0b00000010; // domats 4 NPN

_delay_ms(10000);

PORTC = 0b00011100; // domats 5 PNP

PORTD = 0b00000010; // domats 4 NPN

_delay_ms(10000);

}

}

post-69370-0-50917400-1337442485_thumb.jpg

Labots - The Only
Link to comment
Share on other sites

Pārbaudi montāžu!

 

Nahrenizē MCU. Ktram tranzistroram starp bāzi un emiteru uzmet 100K pretestību. Nafig vajag pretestību? Bāze NEKAD nedrīkst karāties gaisā. Tad izmēģini visu ar rociņām. Uz pareizu PNP ptetestību (tas gals, kurs iet uz MCU) pievienopret zemi. Pareizo NPN galu (kurš ietu uz MCU) pievieno pie +5V.

 

Vēl Ceru ka MCU un tavai platītei GND kopā savienoti.

 

Atgādinu: Shēma nav fotogrāfija. Shēma ir tas, ko tu pirma'ja postā ieliki. Pie tam nepilnīga. Uzīmē pilnu shēmu (ar 100K bāzes pretestībām, Ar 10K pretestībām virknē ar bāzi un MCU ar visām barošanas ķēdēm.

 

Es tālāk skatīšos seriālu un dzeršu brengulīti.

Kodus postēt nav liela jēga. Es nemēģināšu iedziļīnāties. Tāpat neko nesaprotu no Taviem 1 un 0 lauciņiem.

 

 

EDIT:

 

Heh! VIltus trauksme. Izskatās ka H/W (tranzistori) strādā pareizi. Problēma softā.

 

Vienmēr atver tikai vienu NPN un vienu PNP tranzistoru.

Pseidokods:

 

label1:

Iededzinam LED, kuru aktivizē Q1 un Q5

delay 1 ms

Iedzedzinam LED kuru aktivizē Q2 un Q6

delay 1 ms

jump (goto) label1

 

Lieta darīta.

Labots - JDat
Link to comment
Share on other sites

Neko nesaprotu no mikrokontrolieru programmēšanas, tāpēc varbūt tas ir muļķīgs jautājums - vai tajā vidē, kurā tiek rakstīts programmas kods, nav kāds simulators, ar ko var pārbaudīt koda darbības pareizību?

Link to comment
Share on other sites

Problēma ir nevis ar koda simulāciju, bet ar tā saukto loģisko kļūdu: programma strādā saskaņā ar algoritmu, kuru "programmētājs" ir izdomājis. Problēma ir tajā ka programmētājs līdz galam nesaprot kā jāstrādā tādai LED matricai un ir izdomājis nepareizu algoritmu. Ir viena norāde: http://en.wikipedia....trix#LED_matrix

 

Paskaties uz bildīti...

 

Dot_matrix.gif

 

Visu laiku lielā atrumā ir jāieslēdz noteikti LEDi katrā rindā.

 

Ideja paraugam manā iepriekšējā postā.

Link to comment
Share on other sites

The Only
(labots)

Liels paldies. Tagad sanāca. Par tiem 100k pretestībām neaizmirsīšu un pielikšu, bet kā, piemēram, lai nolasa 0b00001111, kas man saglabāta masīvā for vai da jebkādā ciklā pa vienam elementam, sākot no jaunākā bita?

Labots - The Only
Link to comment
Share on other sites

Izskatās ka JDat atbildēt traucē nevis C nemācēšana, bet neprecīzi uzdots jautājums.

Precizīe ko tieši vēlies panākt, kas ir kādā masīvā saglabāts un ko tur gribi ciklot.

Link to comment
Share on other sites

Kāds tur masīvs? Kāds tur C? Kā es darītu? MAn ir 5x4 matrica. $ baiti eleganti iekļaujas reģistrā. Katrā reģistrā pa divām rindām (vai kas tur bija 4 gab). Tas ir operatīvajai izvadei. Ja ir kas vairāk, tad glabākam iekš SRAM, ja vēl vairāk, tad glabājam ārpus chipa (SD karte seriālais ports, atkarībā no uzdevuma). C variantā nezinu kā tiek lietoti MCU resursi (da i slinkums mācītes). ASM ir čakarīgi un lēna programmēšana, bet man patīk kad zinu ko pēc tam katra manis ierakstītā komanda darīs. Labi, tas viss tāpat beztēmai...

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...