Forum: Mikrocontroller und Digitale Elektronik Atmega 168 Schaltet komische Spannungen


von easyphil (Gast)


Angehängte Dateien:

Lesenswert?

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

von Hubert G. (hubertg)


Lesenswert?

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.

von easyphil (Gast)


Lesenswert?

bähm danke nimm das Brett und hau noch mal zu könnt mich grad ohrfeigen 
^^

von Hubert G. (hubertg)


Lesenswert?

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

von easyphil (Gast)


Lesenswert?

hm läuft doch trotzdem?

von Karl H. (kbuchegg)


Lesenswert?

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.

von easyphil (Gast)


Lesenswert?

aha okay danke für den hinweis :)

von Karl H. (kbuchegg)


Lesenswert?

Ist aber auch egal, denn letztendlich wird deine Matrix ja komplett 
anders angesteuert :-)

von easyphil (Gast)


Lesenswert?

okay das versteh ich jetzt nicht ganz ^^°

von Hubert G. (hubertg)


Lesenswert?

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
Noch kein Account? Hier anmelden.