Forum: Mikrocontroller und Digitale Elektronik Probleme Controller für die WordClock zu programmieren


von bom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!
ich habe mich heute mal hingesetzt und wollte anfangen das Programm für
meine Uhr zu schreiben.
Als erstes wollte ich das Schieberegister (IC6) probehalber mit einsen
und nullen füllen, aber alle Ausgänge blieben auf low.
Ich habe das gleiche Programm noch auf einem Arduino probiert und dort
hat es problemlos funktioniert.
(hier der Programmtext:
int main(){
  uint8_t arr[8]={0b00001000, 0b00000000, 0b00001000, 0b00000000,
0b00001000, 0b00000000, 0b00001000, 0b00000000};
  DDRB|=((1<<PIN2)|(1<<PIN3)|(01<<PIN5));  //PIN3 Eingang, PIN5 CLK,
PIN2 output enable
  for (int i=0;i<8;i++){
    PORTB&=~(1<<PIN3);    //PIN3 auf 0
    PORTB|=arr[i];      //PIN3 entsprechend arr[i]
    PORTB|=(1<<PIN5);    //schieben
    PORTB&=~(1<<PIN5);    //  "
  }
  PORTB|=(1<<PIN2);      //output enable
}

)

bei der Fehlersuche habe wollte ich alle PINs des µC als Ausgang und auf
high setzen, aber nur PC6, PC5, PC4 und PB2 sind tatsächlich auf 5V. Der
Rest ist bei 1,4V. Daher funktioniert wahrscheinlich auch das Ansteuern
der Schieberegister nicht.
Ich habe noch nicht alle Teile auf die Platine gelötet, aber eigentlich
sind alle notwendigen drauf. Ich habe sicherheitshalber mal ein Bild
angehängt.
Das Problem tritt nur auf, wenn ich den Controller auf der Platine von 
der Word Clock laufen lassen. Ich habe ihn mal auf ein Duemilanove 
gesteckt, wo er sich wie vorgesehen verhielt.
Mir ist klar, dass es einen fertigen Code gibt, aber ich würde das
Programm gerne selbst schreiben.
Kann mir jemand sagen, woran es liegen könnte?
Über Antworten wäre ich sehr dankbar.
Mit freundlichen Grüßen

von Hannes H. (mui)


Lesenswert?

bom schrieb:
> int main(){
>   uint8_t arr[8]={0b00001000, 0b00000000, 0b00001000, 0b00000000,
> 0b00001000, 0b00000000, 0b00001000, 0b00000000};
>   DDRB|=((1<<PIN2)|(1<<PIN3)|(01<<PIN5));  //PIN3 Eingang, PIN5 CLK,
??? probier mal DDRB |= (1<<PB1)|(1<<PB5);
soweit ich weiss, kann man das DDR nicht mit PIN setzen, außerdem ist 
pin 3 nicht wie im kommentar auf eingang, sondern auf ausgang gesetzt. 
01<<PIN5 sieht auch irgendwie komisch aus. Was macht PIN2 bzw. PB2?
> PIN2 output enable
>   for (int i=0;i<8;i++){
>     PORTB&=~(1<<PIN3);    //PIN3 auf 0
PORTB &= ~(1<<PB3);
>     PORTB|=arr[i];      //PIN3 entsprechend arr[i]
>     PORTB|=(1<<PIN5);    //schieben
PORTB |= (1<<PB5);
ich denke auch hier sollte ein delay hin...
>     PORTB&=~(1<<PIN5);    //  "
PORTB &=~(1<<PB5);
>   }
>   PORTB|=(1<<PIN2);      //output enable
> }
>
> )
guck dir im tutorial erstmal an, wie portpins gesetzt werden. so wird 
das nix. ist für den anfang auch ein echt großes projekt...

von bom (Gast)


Lesenswert?

mit Eingang meinte ich Eingang vom schieberegister nicht vom µC. Ist 
etwas missverständlich.
Ein delay braucht man meiner Meinung nach nicht, weil das Programm ja 
funktioniert, wenn ich es auf einem aduino duemilanove mit 16 MHz laufen 
lasse. Den Controller auf der Word Clock Platine lasse ich nur mit 8 MHz 
laufen, also müsste das das Schieberegister erst recht erkennen.
Das ist nicht mein erstes Projekt und mit portpins setzten hatte ich 
bisher noch nie Probleme. Also daran kann es nun wirklich nicht liegen.
Ich habe es sicherheitshalber mal so gemacht, wie du vorgeschlagen hast, 
aber die Ausgänge des Schieberegisters waren immernoch alle auf low.
Kannst du dir vielleicht denken warum die Pins auf 1,4 Volt sind, wenn 
ich sie auf high setze? der Code dazu:
int main(){
  DDRD=0xff;
  PORTD=0xff;
  DDRB=0xff;
  PORTB=0xff;
  DDRC=0xff;
  PORTC=0xff;
}
Wie gesagt sind nur PC6, PC5, PC4 und PB2 tatsächlich auf 5V und der 
Rest bei 1,4V.
grüße

von spess53 (Gast)


Lesenswert?

Hi

JTAG-Fuse!

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

JTAG Fuse ist sicherlich ein Thema.
Aber das erklärt immer noch nicht die Pegel an den anderen Ausgängen.

Hast du kontrolliert, ob der Brennvorgang auch wirklich erfolgreich war?

Ansonsten gibt es noch irgendein Hardware Problem.
Sieht so aus, als ob dein µC nicht wegläuft.

von Peter D. (peda)


Lesenswert?

Schreib mal Deine SPI-Routine so, wie es üblich ist, also Ausgabe eines 
Bytes und nicht 8 Byte.

Man muß ja nicht absichtlich SRAM und Flash verschwenden.
Und obendrein ist das auch übersichtlicher, als dieses Array-Rumgemähre.

Und lies mal:
Antwort schreiben
Wichtige Regeln - erst lesen, dann posten!


Peter

von bom (Gast)


Lesenswert?

@Peter: sorry für den Sourcecode im Text. Den Code kann man sicherlich 
effizienter gestalten, aber ich habe dieses Thema nicht aufgemacht um 
meine Code zu verbessern, sondern um Hilfe zu bekommen, warum der 
Controller sich unerwartet verhält.

ich benutze eine atmega168. Da dieser über kein JTAG verfügt, sollten 
die Fuses doch eigentlich kein Problem sein, oder?

@kbuchegg: Ich benutze einen USB-Prog mit AVR Studio und bekomme 
folgende Rückmeldung:
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH ..      OK!
Reading FLASH ..      OK!
FLASH contents is equal to file.. OK
Leaving programming mode.. OK!
Das Brennen scheint also auch zu funktionieren.
Meinst du mit weglaufen des Controllers, dass er nicht gegen 
Versorgungsspannung geht?
Kann das an einem Kaputten Baustein, oder an einem Kurzschluss auf der 
Platine liegen?

Danke für eure Hilfe!

von Karl H. (kbuchegg)


Lesenswert?

bom schrieb:

> Meinst du mit weglaufen des Controllers, dass er nicht gegen
> Versorgungsspannung geht?

Gebranntes Kind scheut das Feuer.
In einem anderen Thread haben wir gestern Fehler gesucht und hinten nach 
hat sich rausgestellt, dass der Threadersteller den Reset-Widerstand 
falsch eingebaut hat und der Prozessor nie aus dem Reset herausgekommen 
ist.

Wenn deine Ports mit dem Minimalprogramm nicht auf Ausgang und 1 gehen, 
dann läuft entweder der Prozessor nicht oder er ist defekt. Da du ihn 
programmieren kannst, tippe ich auf ersteres.

> Kann das an einem Kaputten Baustein, oder an einem Kurzschluss auf der
> Platine liegen?

Kurzschluss könnte auch noch sein.

von Peter D. (peda)


Lesenswert?

bom schrieb:
> Wie gesagt sind nur PC6, PC5, PC4 und PB2 tatsächlich auf 5V und der
> Rest bei 1,4V.

Zeig dochmal den Schaltplan.


Peter

von Vlad T. (vlad_tepesch)


Lesenswert?

bom schrieb:
> DDRD=0xff;
>   PORTD=0xff;
>   DDRB=0xff;
>   PORTB=0xff;
>   DDRC=0xff;
>   PORTC=0xff;

damit würde ich extrem vorsichtig sein
wenn du pech hast, hast du damit schon in paar IOs geschrottet.

die RTC hat schließlich auch einen Ausgang.
Wenn die gegeneinander treiben ist das nicht toll.

von bom (Gast)


Angehängte Dateien:

Lesenswert?

hier ist der Schaltplan.
Da diese Platine schon mehrfach in Verwendung ist([[Word Clock Variante 
1]]), würde ich nicht auf einen Fehler im Aufbau tippen. Ich mach mich 
mal ran und suche nach Kurzschlüssen.

von bom (Gast)


Lesenswert?

Kurzschlüsse habe ich keine gefunden.

Vlad Tepesch schrieb:
> damit würde ich extrem vorsichtig sein
> wenn du pech hast, hast du damit schon in paar IOs geschrottet.

das stimmt natürlich...dann muss ich mir wahrscheinlich einfach mal nen 
neuen kaufen und dann nochmal versuchen. Oder gibt es eine Möglichkeit 
herauszufinden, ob IOs kaputt sind?

von Vlad T. (vlad_tepesch)


Lesenswert?

bom schrieb:
> as stimmt natürlich...dann muss ich mir wahrscheinlich einfach mal nen
> neuen kaufen und dann nochmal versuchen.

naja, die AVRs verkraften eine ganze Menge, ich würde mir eher Gedanken 
um die RTC machen.

> Oder gibt es eine Möglichkeit
> herauszufinden, ob IOs kaputt sind?

na klar.
Auf ein Steckbrett mit Minimalbeschaltung
und einmal alle IOs durchschalten
Eingänge ähnlich, nur dass halt ein funktionierender Ausgang ne LED 
anschaltet, wenn er funktioniert.
die ADCs könnte man ähnlich testen.
alle Eingänge den gleichen Widerstand messen lassen und das Ergebnis auf 
10 LEDs ausgeben.

von bom (Gast)


Lesenswert?

ich denke, dass der Controller hinüber ist. Hab grad die IOs getestet 
und einige PINs scheinen nicht mehr zu funktionieren.
Ich werde mir demnächst einen neuen Controller besorgen und es dann 
nochmal testen.
Auf jeden Fall vielen Dank für eure schnelle Hilfe! Ist wirklich ein 
super Forum.
Wenn es mit dem neuen Controller immer noch nicht klappt, dann macht 
euch auf weitere Fragen gefasst :)
Grüße

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.