Hidiho, ich hoffe Ihr hattet alle ein schönes Weihnachtsfest. Ich auf jeden fall. Nur jetzt bin ich am verzweifeln xD. Vlt ist es ja nur eine kleinigkeit die ich übersehen habe aber etwas ist ziemlich merkwürdig. So nun zu mein Problem: Ich habe einen Atmega 168 aufn Steckbrett aufgebaut. Interner Quarz programmiert wird über ISP mit dem Diamex AVR Fuses hab ich noch nicht verstellt. Eine kleine LEDmatrix 5x5 selbst zusammen gebastelt. Pro Spalte ein Vorwiderstand von 150 Ohm. Masse wird über einen BC547 C geschaltet. LED`s sind normale 5mm LED`s Rot 6000 mcd. So im Anhang mein Sourcecode geschrieben in C nich über die Menge aufregen is ja nur zum test ;). Ja wie erklär ichs am Besten.? Also wenn ich meine erste Spalte auswähle Leuchtet die 1te LED mit voller Kraft dannach springt er zur nächsten welche dann dunkler ist das irretiert mich als erstes aber jetzt kommts nächste Spalte... alle LEDs leuchten nur schwach und so gehts dann weiter.... Transistoren Steuern voll durch hab ich schon gemessen. Aber an der Anschlüssen zu dem "PLUS-POL" der Led liegen nur 1,6 Volt an wenn Sie angesteuert werden. Ich habe schon etwas gefunden, das man ggf den JTAG deaktivieren soll. Ich find das aber bei den FUSES in AVR- Studio und rumspielen nene ^^. Andererseits hab ich überlegt das vlt interne Pullups aktiv sind, aber ist das denn so wenn ich die als Ausgang definiert habe?. Ja dann werd ich mal noch schreiben wie ich alles am AVR Angeschlossen habe: PB0--> Basis Transistor 1 PB1--> Basis Transistor 2 PB2--> Basis Transistor 3 PB3--> Basis Transistor 4 PB4--> Basis Transistor 5 natürlich mit 10 Kohm widerstand ;) PC0--> Plus Led 1 PC1--> Plus Led 2 PC2--> Plus Led 3 PC3--> Plus Led 4 PC4--> Plus Led 5 natürlich mit dem Vorwiderstand 150 Ohm ;) Wäre auf jedenfall schön wenn ihr mir helfen könntet ich hab kein Plan was ich falsch mache -_-. Achso Matrix hab ich mit direkten 5 Volt schon durchgetestet (wusste schon warum ich Codierschalter rauf gebastelt hab) funktioniert einwandfrei. Also ich vermute den Fehler in meiner Software weiß nur nich wo ;( Freu mich auf eure Hilfe
1 | int main( void ) |
2 | {
|
3 | DDRB = ( 1 << PB0 ); // PB0 an PORTB als Ausgang setzen |
4 | DDRC = ( 1 << PD0 ); // PB0 an PORTB als Ausgang setzen |
Wie wäre es wenn du den ganzen Port als Ausgang definieren würdest. DDRB=0xff; DDRC=0xff; wäre z.B. eine Möglichkeit. Weiter habe ich mir den Code nicht angeschaut.
bähm danke nimm das Brett und hau noch mal zu könnt mich grad ohrfeigen ^^
PORTB |= (1<<PB2); PB2 auf 1 setzten PORTB &= ~(1<<PB2); PB2 auf 0 setzten Weiteres siehe hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
easyphil schrieb: > hm läuft doch trotzdem? Ja, natürlich. Man kann die Fläche eines 2 * 3 Meter großen Grundstücks auch ausrechnen indem man 2 -+ 2 3 mal 2 -+ ----- 6 Quadratmeter ausrechnet. Man kriegt trotzdem das richtige Ergebnis raus. Aber bei einem 117 mal 56 Meter großen Grundstück, ist es dann schon einfacher, wenn man Multiplizieren kann, anstatt 55 117 mal untereinander zu schreiben und zu addieren.
Ist aber auch egal, denn letztendlich wird deine Matrix ja komplett anders angesteuert :-)
Das ganze ist einfach nicht sauber programmiert. Solange du nur die Matrix so ansteuerst, wird es funktionieren. Schalte mal an beliebige freie Ports zwei Leds an und schalte diese vor jedem Zeilenwechsel um. Also die eine ein und die andere aus. Bevor der Zeilenwechsel kommt noch eine kurze Pause damit das ganze schön ersichtlich ist.
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.