The Only Ierakstīts Maijs 19, 2012 Share Ierakstīts Maijs 19, 2012 Uztaisīju LED matricu bez nekādiem ieteikumiem, bez shēmām, bet neiet 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. Link to comment Share on other sites More sharing options...
JDat Maijs 19, 2012 Share Maijs 19, 2012 (labots) 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 Maijs 19, 2012 - JDat Link to comment Share on other sites More sharing options...
The Only Maijs 19, 2012 Author Share Maijs 19, 2012 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 More sharing options...
JDat Maijs 19, 2012 Share Maijs 19, 2012 Samēģināji? Sanāca? Link to comment Share on other sites More sharing options...
The Only Maijs 19, 2012 Author Share Maijs 19, 2012 Samēģināji? Sanāca? Tranzistori bija jau vietā, kad es filmēju šo kļūdu. Link to comment Share on other sites More sharing options...
JDat Maijs 19, 2012 Share Maijs 19, 2012 (labots) 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 Maijs 19, 2012 - JDat Link to comment Share on other sites More sharing options...
The Only Maijs 19, 2012 Author Share Maijs 19, 2012 (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); } } Labots Maijs 19, 2012 - The Only Link to comment Share on other sites More sharing options...
JDat Maijs 19, 2012 Share Maijs 19, 2012 (labots) 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 Maijs 19, 2012 - JDat Link to comment Share on other sites More sharing options...
Firza Maijs 19, 2012 Share Maijs 19, 2012 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 More sharing options...
JDat Maijs 19, 2012 Share Maijs 19, 2012 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... 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 More sharing options...
The Only Maijs 19, 2012 Author Share Maijs 19, 2012 (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 Maijs 19, 2012 - The Only Link to comment Share on other sites More sharing options...
JDat Maijs 19, 2012 Share Maijs 19, 2012 Ko? Sorry, C nemāku, Arduino neprogrammēju. Es turos pie ASM MCU lietās. Link to comment Share on other sites More sharing options...
crane Maijs 21, 2012 Share Maijs 21, 2012 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 More sharing options...
JDat Maijs 21, 2012 Share Maijs 21, 2012 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 More sharing options...
Recommended Posts
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 kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!