Hallo zusammen, Ich habe ein kleines aber nerviges Problem. Also ich habe mir ein kleines LED Matrix Programm geschrieben was erstmal einfach nur ein C anzeigen soll. So nun zu mein Problem: Ich habe das Programm fertig gestellt und mit einem Simulationsprogramm auf meinem Rechner ausgetest. Ich habe es dann einmal ausprobiert und der hat mir ein C angezeigt. So nun dachte ich: Jipi es funktioniert kann ich es ja mal auf einer richtigen Platine bauen und austesten. So hab alles genauso aufgebaut wie es im Simulationsprogramm aufgebaut is aber aufmeiner Platine will die sch**** nicht klappen.? Woran könnte es liegen? Mfg Gehacktes Wenn es notwendig is mach ich auch ein Foto meiner Platinen bestückung und pack das Programm rein.
> Woran könnte es liegen?
- Hardware falsch aufgebaut (Kurzschluss, etc.)
- Software passt nicht zum nicht näher erwähnten Controller (Speed,
Fuses, etc.)
- Hardware hat an sich einen Bug
- ...
Liegen KÖNNEN könnte es an vielem... Die Frage ist: was hast du bereits
alles geprüft?
Normalerweise macht man es so, dass die Hardware mit einem kleinen
Programm geprüft wird, also ob der µC läuft etc.
Danach wird angefangen die Software zu schreiben, und zwischendrin immer
mal wieder auf die Hardware gepustet, um zu sehen, ob's zumindest im
groben noch funktioniert. So mache ich es zumindest, weil ich nicht am
Ende der Software feststellen möchte, dass ein Mist den ich am Anfang
programmiert habe mir den ganzen Ansatz verbeult hat -> das kann
manchmal alles über'n Haufen werfen...
Ralf
Robin Fehrecke schrieb: > Woran könnte es liegen? An Deinem Geiz mit Informationen. Schaltplan (PDF, PNG), Source (C, ASM) als Anhang ist das Mindeste. Peter
Also das Programm heißt isis7. Und was hab ich bisher getestet? Also ich habe wie gesagt das Programm getestet in meiner Simulation, dann habe ich die Schaltung soweit auich getestet gehabt. Und das brennen des Atmels ist nach Brennprogramm auch erfolgreich verlaufen
Robin Fehrecke schrieb: > Und was hab ich bisher getestet? Also ich habe wie gesagt das Programm > getestet in meiner Simulation, dann habe ich die Schaltung soweit auich > getestet gehabt. Das ist eben der Unterschied zwischen einer Simulation und der Realität. In einer Simulation kann man niemals alle Aspekte der Realität nachbilden. > Und das brennen des Atmels ist nach Brennprogramm auch > erfolgreich verlaufen Davon gehen wir sowieso implizit aus. Trotzdem solltest du erst mal, wie weiter oben schon vorgeschlagen, mit kleineren einfacheren Testprogrammen deine Hardware durchtesten. Eine einzelne LED an einen Portpin (+Vorwiderstand). Led einschalten, Led ausschalten, LED blinken lassen.
Hm... Also beim Atmega fehlen ja schon ein paar Teile... Ist der Schaltplan so wirklich komplett? Oder hast du uns hier nur schnelle eine Zeichnung erstellt? Wie hast Du z.B. das Teil geflasht, ohne Anschlüsse? Dann solltest Du noch den Reset-Anschluss (PC6) mit einem 10k an VCC anschließen. Wenn der, wie bei dieser Zeichnung in der Luft hängt, ist das evtl. auch ungünstig. Hast Du beim Flashen evtl. auch gleich dies Fuses mit verstellt? Läuft der interne RC-Oszillator noch? Kannst Du das Teil auch jetzt noch ansprechen?
Also mit einem Lauflicht habe ich es auch schon ausprobiert und klappt auch nicht. Es kann sein das ich vlt nicht alles vollständig angeschlossen habe.also wenn ihr mir evtl. einen Schaltplan zeigen könntet wie er denn eurer Meinung nach vollständig angeschlossen wird wäre das nett Dann probiere ich das heute einmal aus. Und ja auf jeden fall habe ich das auch mit einem externen quarz ausprobiert^^ soviel kann ich sagen. Also wie gesagt mit Atmega und c kenn ich mich halt noch net so gut aus und von daher kann es gut sein das da irgendein anschluss fehlt. Mfg Gehacktes
Robin Fehrecke schrieb: > Also mit einem Lauflicht habe ich es auch schon ausprobiert und klappt > auch nicht. Ach. Und du denkst, dass eine Matrix multiplexen einfacher ist als ein Lauflicht. Wenn Lauflicht nicht geht, dann einzelne LED! Schluck deinen Stolz runter und schalte 1 LED ein. Das ist der einfachst mögliche Fall. Solange der nicht funktioniert hat es keinen Sinn da noch mehr Komplexität draufzupacken! > Es kann sein das ich vlt nicht alles vollständig > angeschlossen habe. Was soll das bedeuten? Hast du oder hast du nicht? > also wenn ihr mir evtl. einen Schaltplan zeigen > könntet wie er denn eurer Meinung nach vollständig angeschlossen wird Dein Schaltplan ist zwar nicht vollständig, der AtMega sollte damit aber ein erstes Lebenszeichen von sich geben. Dass du ohne Probleme flashen kannst, ist schon mal ein gutes Zeichen. > wäre das nett Dann probiere ich das heute einmal aus. Und ja auf jeden > fall habe ich das auch mit einem externen quarz ausprobiert^^ soviel > kann ich sagen. Was genau hast du ausprobiert? Hast du an den Fuse-Bits rumgespielt? > Also wie gesagt mit Atmega und c kenn ich mich halt noch > net so gut aus Ein Grund mehr erst mal mit einfachen Dingen anzufangen. Eine Matrix multiplexen ist nicht einfach.
1 | #include <avr/io.h> |
2 | |
3 | int main() |
4 | {
|
5 | DDRC = (1<<PC0) | (1<<PC1) | (1<<PC2); |
6 | DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2); |
7 | |
8 | PORTB &= ~(1<<PB0); |
9 | PORTC |= (1<<PC2); |
10 | |
11 | while(1) |
12 | ;
|
13 | }
|
brenn dieses Programm auf deinen Mega. Danach müsste 1 LED leuchten. Wenn sie das nicht tut, dann miss mit einem Voltmeter die Pegel an PB0 bzw. PC2 nach. PB0 muss auf 0 (also 0V) sein, PC2 muss auf 1 (also 5V sein). Wenn die Pegel stimmen, dann gibt es noch die Möglichkeit, dass du die LED verkehrt herum eingelötet hast. Wenn die Pegel nicht stimmen, dann muss man weitersehen.
Sehe ich das richtig, über PC0-2 wird das Bitmuster an die LEDs ausgegeben, die leuchten sollen und über PB0-2 wird der Port auf Low gezogen, dessen LED Zeile aktiv sein soll ? Die internen Pullups von 50kOhm vom atmel hast du dann als zusätzliche Vorwiderstände an den LEDs, dazu noch für 3 LEDs zusammen. Der Strom sollte zu gering sein dass die LEDs leuchten. Ich würde an PB0-2 Transistoren anschliessen, die eine LED Zeile auf Ground zieht, dann sollte es gehen. Gruß, dasrotemopped
dasrotemopped schrieb: > Die internen Pullups von 50kOhm vom atmel hast du dann > als zusätzliche Vorwiderstände an den LEDs, an einem auf Ausgang geschalteten Port gibt es keine Pullups > Ich würde an PB0-2 Transistoren anschliessen, die eine > LED Zeile auf Ground zieht, dann sollte es gehen. Das sowieso. Aber lass uns erst mal etwas zum leuchten bringen. Er braucht ja auch ein Erfolgserlebnis. Und auch wenn es für den Mega erst mal eine Tortur ist, aushalten wird er es zunächst mal. Auf Dauer geht das natürlich nicht, das ist schon klar.
Ja, stimmt, als Ausgang hat der Atmel keine Pullups. Wie hoch ist denn der Einganswiderstand von einem Ausgang bei LOW ? Hab auf die schnelle keinen Hinweis im Datenblatt finden können. Ggf. müsste ja der Vorwiderstand der LEDs angepasst werden. Gruß, dasrotemopped
dasrotemopped schrieb: > Wie hoch ist denn der Einganswiderstand von einem Ausgang bei LOW ? sollte nah 0 sein, meinst nicht auch.... ;)
dasrotemopped schrieb: > Ja, stimmt, als Ausgang hat der Atmel keine Pullups. > Wie hoch ist denn der Einganswiderstand von einem Ausgang bei LOW ? > Hab auf die schnelle keinen Hinweis im Datenblatt finden können. > Ggf. müsste ja der Vorwiderstand der LEDs angepasst werden. Die sind zur Zeit mit 38mA dimensioniert (100 Ohm Vorwiderstand, ich hab rote LED angenommen) und das ist ein bischen viel für den armen Mega. Bei mehr eingeschalteten LED wirds dann noch mehr in Richtung Überlastung. (Nicht weitersagen: Auch wenn man das nicht macht, gleich geht der Mega nicht kaputt. Der steckt auch schon mal einen Kurzschluss an einem Ausgang weg. Klar: Für ein Gerät im Dauerbetrieb geht das natürlich nicht, aber auf dem Experimentierboard ist es nicht soooo schlimm)
warum nicht gleich die richtige Lösung zeigen ? Wenn man an einem Problem hängt nicht das nächste Problem in der Lösung einbauen. Hier mal den Schaltplan, wie ich Ihn machen würde, zur Software wurde hier ja schon genug gesagt. Damits nicht zu einfach ist, die Widerstandswerte müssen noch gewählt werden. Gruß, dasrotemopped
Ich muß wohl blind wie ein Maulwurf sein, denn ich habe bisher keine einzige Zeile Code vom Fragesteller sehen können. Aber trotzdem wird hier heiß diskutiert. Kopfschüttel. Ich seh das als geschickte Masche, den fertigen Code zu bekommen, ohne selbst was gemacht zu haben. Peter
dasrotemopped schrieb: > Hier mal den Schaltplan, wie ich Ihn machen würde, Soso. Was war nochmal mit bipolaren Transistoren ... Ein Problem nur halb gelöst, dass sich mit dem Bewusstsein der Einschränkung vermeiden lässt gegen eine Version getauscht, die den gleiche Überlastung der Portpins (Hint: Neben den Zeilen sind auch die Spalten betroffen) erlaubt und eine neue Baustelle schon beim Leuchten keiner einzigen LED aufreisst.
Karl heinz Buchegger... also ich habe das programm jetz einmal auf meinen atmel gebrannt und ausprobiert...also die LED die an PC2 angeschlossen ist leuchtet schonmal :)... Aber hab da eine Frage...an PA5, PA6, PC1 und PD1 liegt auch eine 1 an woran liegt das? Nach dem Programm zu folge dürften die dch garnet leuchten oder?^^ Sy wie gesagt bin noch neu in dem Thema xD Ach und hier mal mein Prgramm von der LED_Matrix wo von die Frage ausging xD: #include <avr/io.h> // Namen der IO Register #include <util/delay.h> // Funktionen zum warten // Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden int main(void) { DDRB = 0xff; // alle B pins als ausgang konfigurieren PORTB = 0xff; // erstmal alles abstellen DDRC = 0xff; PORTC = 0xff; while (1) { PORTB =0b11111010; PORTC =0b00000011; _delay_ms(10); PORTB =0b11111101; PORTC =0b00000100; _delay_ms(10); } }
Robin Fehrecke schrieb: > PORTB =0b11111010; > PORTC =0b00000011; Ich denke mal es liegt daran, dass du versuchst hier 4 LED auf einmal einzuschalten. Bei deinen Widerstandwerten wird das für den Mega schon ein bischen viel. Nimm davon Abstand. Selbst bei nur 1 LED betreibst du den Mega schon hart an der Grenze dessen was er Strom liefern kann.
okey aber jetz mal zu deinem Programm...ist das normal das so viele leds leuchten??? kapiers net xD weil du sagtest ja es leuchtet dann nur eine xD
okey aber jetz mal zu deinem Programm...ist das normal das so viele leds leuchten??? kapiers net xD weil du sagtest ja es leuchtet dann nur eine xDv
Robin Fehrecke schrieb: > okey aber jetz mal zu deinem Programm...ist das normal das so viele leds > leuchten??? kapiers net xD weil du sagtest ja es leuchtet dann nur eine > xDv ? Ja. So ist das Testprogramm. Ich wollte nur wissen * ob dein µC läuft * ob du Programm korrekt zum µC übertragen kannst * ob die LED korrekt angeschlossen ist (POlung) Am ANfang des Threads wussten wir das alles noch nicht. Jetzt mit dem testprogramm wissen wir das. Ab jetzt darfst du übernehmen. Ich mach dir doch nicht dein Programm fix fertig.
ja nein sollst du auch nicht wollt es nur wissen...danke für die vielen beiträge... ich werde mich jetz mal dran setzen und weiter probieren
Robin Fehrecke schrieb: > okey aber jetz mal zu deinem Programm...ist das normal das so viele leds > leuchten??? kapiers net xD weil du sagtest ja es leuchtet dann nur eine > xDv Ach Jetzt hab ichs erst verstanden. Bei dir leuchten mehr LED und nicht nur eine. Ja du hast recht. Das ist ein Fehler im Testprogramm (hab nicht darauf geachtet)
1 | #include <avr/io.h> |
2 | |
3 | int main() |
4 | {
|
5 | DDRC = (1<<PC0) | (1<<PC1) | (1<<PC2); |
6 | DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2); |
7 | |
8 | PORTB = 0b00000110; |
9 | PORTC = 0b00000100; |
10 | |
11 | while(1) |
12 | ;
|
13 | }
|
jetzt leuchtet nur noch eine.
He!? ich dachte das C hat schon mal geleuchtet... man man...Wo íst dein Code? m.
#include <avr/io.h> // Namen der IO Register #include <util/delay.h> // Funktionen zum warten // Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden int main(void) { DDRB = 0xff; // alle B pins als ausgang konfigurieren PORTB = 0xff; // erstmal alles abstellen DDRC = 0xff; PORTC = 0xff; while (1) { PORTB =0b11111010; PORTC =0b00000011; _delay_ms(10); PORTB =0b11111101; PORTC =0b00000100; _delay_ms(10); } } das ist der Code für die matrix!!! Also das C habe ich in einem Simulator darstelen können aber nicht bei meiner hardeware!!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.