Forum: Mikrocontroller und Digitale Elektronik testprogramm 7 segment


von wolf (Gast)


Lesenswert?

so ich habs jetzt mal so gemacht:
1
#include <mega32.h>
2
#include <delay.h>
3
4
#define zero  0b0111111 
5
#define one   0b0000110
6
#define two   0b1011011 
7
#define three 0b1001111 
8
#define four  0b1100110 
9
#define five  0b1101101 
10
#define six   0b1111101 
11
#define seven 0b0000111 
12
#define eight 0b1111111 
13
#define nine  0b1101111 
14
15
void main(void)
16
{
17
       DDRA=0xFF;
18
19
while (1)
20
      {
21
        PORTA=zero;  
22
        delay_ms(2000);  
23
        PORTA=one;  
24
        delay_ms(2000);
25
        PORTA=two;  
26
        delay_ms(2000); 
27
        PORTA=three;  
28
        delay_ms(2000);
29
        PORTA=four;  
30
        delay_ms(2000);
31
        PORTA=five;  
32
        delay_ms(2000);
33
        PORTA=six;  
34
        delay_ms(2000);
35
        PORTA=seven;  
36
        delay_ms(2000);
37
        PORTA=eight;  
38
        delay_ms(2000);
39
        PORTA=nine;  
40
        delay_ms(2000);
41
      }
42
}

funktioniert wunderbar, außer die 8 leuchtet nicht...bleibt alles 
dunkel. nach 2s delay kommt die 9 wieder und das programm läuft normal 
weiter.

von wolf (Gast)


Lesenswert?

an den mod:

sorry...soll eigentlich hier her als antwort:

Beitrag "7 segment problem"

von Otto (Gast)


Lesenswert?

Deine Defines der Ziffern haben alle ein Bit zu wenig....

von Karl H. (kbuchegg)


Lesenswert?

Wie ist die Beschaltung vom Mega32?
Hast du AVcc korrekt beschaltet?

von wolf (Gast)


Lesenswert?

mega ist sicher richtig beschaltet. das ist ein programmier board, 
stk500  kompatibel. daran kanns mal nicht liegen.

habs sogar mit 2 µCs versucht. hilft auch nichts.

von Karl H. (kbuchegg)


Lesenswert?

wolf schrieb:
> mega ist sicher richtig beschaltet. das ist ein programmier board,
> stk500  kompatibel. daran kanns mal nicht liegen.

Na dann.
Wenn die Hardware keinen Fehler hat, dein Programm keinen Fehler hat, 
dann kanns eigentlich nur noch an den Geistern liegen, die dir nicht 
gewogen sind.

(Hast du schon mal mit einem Voltmeter nachgemessen, ob die Pins am µC 
auf 1 sind, ob am ULN die richtigen Signale anliegen, ob die ULN 
Ausgänge die richtigen Pegel haben, ob deine Spannungsversorgung 
einbricht, ob du irgendwo einen Kurzen gelötet hast, etc.

von Dietrich L. (dietrichl)


Lesenswert?

Bei "8" sind alle Segmente an, Du hast also den größten Strom. 
Vielleicht hat es damit etwas zu tun - obwohl mir nicht so richtig was 
einfällt, was da passieren könnte. Wenn die Spannung einbricht, würde ja 
nur die Helligkeit geringer werden, oder der µC macht Reset - was ja 
nach Deiner Beschreibung nicht passiert.

Hast Du die Signalwege bei der "8" mal durchgemessen? Mal nur die "8" 
ausgegeben?

Gruß Dietrich

von Peter D. (peda)


Lesenswert?

wolf schrieb:
> außer die 8 leuchtet nicht

Dann ist der GND des ULN offen.
Solange ein Eingang 0 ist, kriegt er GND über die Substratdiode.
Sind aber alle 1, fehlt der GND.


Peter

von Dietrich L. (dietrichl)


Lesenswert?

Peter Dannegger schrieb:
> Sind aber alle 1, fehlt der GND.

Respekt, Peter!!!

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:
> wolf schrieb:
>> außer die 8 leuchtet nicht
>
> Dann ist der GND des ULN offen.
> Solange ein Eingang 0 ist, kriegt er GND über die Substratdiode.
> Sind aber alle 1, fehlt der GND.

Macht Sinn!
Jetzt bin ich auf die Rückmeldung neugierig.

von wolf (Gast)


Lesenswert?

Peter Dannegger schrieb:
> wolf schrieb:
>> außer die 8 leuchtet nicht
>
> Dann ist der GND des ULN offen.
> Solange ein Eingang 0 ist, kriegt er GND über die Substratdiode.
> Sind aber alle 1, fehlt der GND.
>
>
> Peter

habs nochmal überprüft...3mal durchgepipst...gnd ist da.

an der versorgung kanns auch nicht liegen, da ich ein 60 w netzteil 
habe.

habs auch mal am portb versucht. leider alles kein erfolg.

pin 9 vom uln muss doch nirgends hin oder?
bzw. was soll der überhaupt machen?

von Karl H. (kbuchegg)


Lesenswert?

wolf schrieb:

>
> pin 9 vom uln muss doch nirgends hin oder?
> bzw. was soll der überhaupt machen?

Ähm.
Wenn ein Pin im Datenblatt mit GND beschriftet ist, dann solltest du den 
auch tunlichst an GND anhängen. Und dieses 'solltest' ist kein 'du 
kannst es dir aussuchen' sondern ein amerikanisches 'du machst das so!'

Also hatte Peter doch recht. Alter Fuchs.

von wolf (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> wolf schrieb:
>
>>
>> pin 9 vom uln muss doch nirgends hin oder?
>> bzw. was soll der überhaupt machen?
>
> Ähm.
> Wenn ein Pin im Datenblatt mit GND beschriftet ist, dann solltest du den
> auch tunlichst an GND anhängen. Und dieses 'solltest' ist kein 'du
> kannst es dir aussuchen' sondern ein amerikanisches 'du machst das so!'
>
> Also hatte Peter doch recht. Alter Fuchs.


bei mir ist der pin 8 gnd, pin 9 sind die "common free wheeling diodes".

hab jetzt auch noch gemessen. wenn ich nur eine 8 rausschreibe, dann hab 
ich an keinem ausgang von atmega "high".

das ist alles was ich zu berichten habe.

von Dietrich L. (dietrichl)


Lesenswert?

wolf schrieb:
> bei mir ist der pin 8 gnd, pin 9 sind die "common free wheeling diodes".

Das ist richtig, da Du ja den ULN2003 hast - zumindest nach Deiner 
Skizze. Ist das auch so?

von Dietrich L. (dietrichl)


Lesenswert?

wolf schrieb:
> wenn ich nur eine 8 rausschreibe, dann hab
> ich an keinem ausgang von atmega "high".

Jetzt ist das Rückbauen angesagt: alles abklemmen und nur den µC 
durchmessen. Und auch den µC mal tauschen.

von wolf (Gast)


Lesenswert?

Dietrich L. schrieb:
> wolf schrieb:
>> bei mir ist der pin 8 gnd, pin 9 sind die "common free wheeling diodes".
>
> Das ist richtig, da Du ja den ULN2003 hast - zumindest nach Deiner
> Skizze. Ist das auch so?

genau so ist es...rückbauen muss ich eigentlich nichts. ich hab das 
ganze mit stecker verbunden. werde es heute im laufe des tages mal 
testen und dann berichten.

von Karl H. (kbuchegg)


Lesenswert?

wolf schrieb:
> Karl Heinz Buchegger schrieb:
>> wolf schrieb:
>>
>>>
>>> pin 9 vom uln muss doch nirgends hin oder?
>>> bzw. was soll der überhaupt machen?
>>
>> Ähm.
>> Wenn ein Pin im Datenblatt mit GND beschriftet ist, dann solltest du den
>> auch tunlichst an GND anhängen. Und dieses 'solltest' ist kein 'du
>> kannst es dir aussuchen' sondern ein amerikanisches 'du machst das so!'
>>
>> Also hatte Peter doch recht. Alter Fuchs.
>
>
> bei mir ist der pin 8 gnd, pin 9 sind die "common free wheeling diodes".

Mein Fehler.
Ich hab beim 2803 nachgesehen.
Da ist 9 GND

von oldmax (Gast)


Lesenswert?

Hi
Mir fällt auf, das du in deinem verlinkten Beitrag die 8 anders 
definierst...

>unsigned char zahl_0=0x3f;
>unsigned char zahl_1=0x86;
>unsigned char zahl_2=0x5b;
>unsigned char zahl_3=0x4f;
>unsigned char zahl_4=0x66;
>unsigned char zahl_5=0x6d;
>unsigned char zahl_6=0x7d;
>unsigned char zahl_7=0x87;
>>unsigned char zahl_8=0x00;
>unsigned char zahl_9=0x6f;

Kann es sein, das der obige Code gar nicht im Controller  ist und immer 
noch der Code aus  dem anderen Beitrag ?
Gruß oldmax

von wolf (Gast)


Lesenswert?

oldmax schrieb:
> Hi
> Mir fällt auf, das du in deinem verlinkten Beitrag die 8 anders
> definierst...
>
>>unsigned char zahl_0=0x3f;
>>unsigned char zahl_1=0x86;
>>unsigned char zahl_2=0x5b;
>>unsigned char zahl_3=0x4f;
>>unsigned char zahl_4=0x66;
>>unsigned char zahl_5=0x6d;
>>unsigned char zahl_6=0x7d;
>>unsigned char zahl_7=0x87;
>>>unsigned char zahl_8=0x00;
>>unsigned char zahl_9=0x6f;
>
> Kann es sein, das der obige Code gar nicht im Controller  ist und immer
> noch der Code aus  dem anderen Beitrag ?
> Gruß oldmax


folgendes steht im controller:

#define eight 0b01111111

von oldmax (Gast)


Lesenswert?

Hi
Wirklich ? Ich hab das auch gelesen, aber es ist seltsam, wenn mann mal 
so über die Antworten liest und es scheinbar keine Erklärung gibt. Du 
sagst ja selbst, andere Zahlen funktionieren und wenn du die Bits bei 
der Acht nicht ausmaskierst, was ich bei meinen bescheidenen 
C-Kenntnissen auch nicht sehe, kann es nur sein das du glaubst, das die 
Definition von eight im Controller steht. (Oder gibt es bei "C" ein 
reserviertes Wort "eight"?
Gruß oldmax

von Karl H. (kbuchegg)


Lesenswert?

oldmax schrieb:

> Definition von eight im Controller steht. (Oder gibt es bei "C" ein
> reserviertes Wort "eight"?

Nein, gibt es nicht.
Softwareseitig ist soweit alles in Ordnung, wenn das hier ganz am Anfang 
gepostete Programm so im Controller geflasht wurde.

Kann nur noch ein Hardwareproblem sein.

von oldmax (Gast)


Lesenswert?

Hi

>Kann nur noch ein Hardwareproblem sein.
Dann muss er aber externe Bauteile an der Skizze vorbei gelogen haben. 
Ich glaub eher daran, und das ist einfach augenscheinlich, das das 
Programm aus dem anderen Post drin ist. Mir leuchtet nicht ein, wie bei 
einer 8 (Alls Segmente ein) plötzlich alls duster werden soll. Ist 
absolut nicht logisch, aber ich bin wirklich mal auf die Auflösung 
gespannt.
Gruß oldmax

von Otto (Gast)


Lesenswert?

evtl. änderst du mal die Definition von EIGHT nur versuchsweise zuerst 
auf

10101010

und dann auf

01010101.

Evtl bekommst du dadurch neue Erkenntnisse.

von Karl H. (kbuchegg)


Lesenswert?

oldmax schrieb:
> Hi
>
>>Kann nur noch ein Hardwareproblem sein.
> Dann muss er aber externe Bauteile an der Skizze vorbei gelogen haben.
> Ich glaub eher daran, und das ist einfach augenscheinlich, das das
> Programm aus dem anderen Post drin ist.

Daher ja auch die Einschränkung "wenn geflasht wie gepostet".


Tja.
Solange er nicht davon abgeht, da ständig seine Zahlenreihe 
durchzulaufen, und stattdessen einfach mal eine 8, und nur eine 8, auf 
den Port ausgibt, damit man mal in aller Ruhe messen kann (zb ob auch 
alle Portpins auf 1 sind, ob am ULN alle Bits da sind, etc), wird das 
auch nichts.
Auch Fehlersuche will gelernt sein.

(Ich denke trotzdem immer noch, dass irgendwo die Masse fehlt. Peter hat 
ein Szenario beschrieben, welches genau passen würde:
Im ULN sind alle Treiber masseseitig verbunden und es gibt eine 
Substratdiode von der Masse zum Eingang. Fehlt dem ULN die direkte 
Masseverbindung, dann gehts über diese Diode auf den Eingang und da 
mindestens 1 Eingang über den Mega-Portpin auf Masse liegt, hat der ULN 
sowas wie eine "Hilfsmasse". Sind aber alle Pins vom Mega auf 1, dann 
ist es Essig mit dieser 'Hilfsmasse'.
Als Szenario ist das plausibel und es würde genau der Beobachtung 
entsprechen. Entscheiden kann man das aber nur, indem man alle IC aus 
dem Sockel nimmt und am Sockel den bewussten Pin nach Masse 
durchklingelt. Ich wette das hat er nicht getan, sondern die IC im 
Sockel gelassen, wodurch das durchklingeln nur noch bedingt 
aussagekräftig ist.
Oder aber man gibt einfach mal eine 8 aus und tippt mit einem Stück 
Draht, der an einem Ende ganz sicher auf Masse liegt einfach mal den GND 
Pin vom ULN an. Kann ja auch eine kalte Löststelle sein.

von Dietrich L. (dietrichl)


Lesenswert?

Hallo wolf,

hat Du das "Phänomen"  mit der 8 gelöst? Gibt es neue Erkenntnisse? Das 
würde mich (uns) doch interessieren...

Gruß Dietrich

von wolf (Gast)


Lesenswert?

so ich habs jetzt endlich...und es war die masse :)

das problem lag daran, dass ich mein atmega32 nicht mit dem selben 
netzteil betrieben hatte als die segmente. somit keine gemeinsame masse.

also riesen dank für die hilfe leute.

von Dietrich L. (dietrichl)


Lesenswert?

wolf schrieb:
> so ich habs jetzt endlich...und es war die masse :)

Schön, dass es keine Hexerei war! Und Glückwunsch an Peter Dannegger, 
der schon sehr früh auf diesen Fehler gekommen war!

Gruß Dietrich

von wolf (Gast)


Lesenswert?

wo ein problem schon das nächste:

ich hab ja 4 solche segmente. zusätzlich habe ich ja noch zusätzlich 7 
taster die ich einlesen muss (heim +, heim -, gast +, gast-, uhr start, 
uhr stopp, uhr auf 45min stellen).

das geht sich allerdings nicht mit den pins aus. was soll ich eurer 
meinung nach machen? multiplexen? wäre es vielicht gleich besser eine 
tastatur zu verwenden? dazu ist die steuerungseinheit ca. 100m von der 
anzeigetafel entfernt. also ist auch einiges an kabelaufwand nötig. ist 
es möglich so etwas über funk zu steuern, oder gar nicht besser?

schon mal großen dank für die hilfe.

von Karl H. (kbuchegg)


Lesenswert?

Anzeige multiplexen.
Dann bleiben dir für die Tasten noch gengend Pins übrig.

An deiner Stelle würde ich allerdings tatsächlich eine Trennung zwischen 
Anzeige und Bedieneinheit anstreben.

> ist es möglich so etwas über funk zu steuern
Mein persönliches Credo: Wer Funk kennt, nimmt Kabel.

gewöhnliche rs232 mit 9600 Baud sollte ausreichend schnell sein.

von Reinhard Kern (Gast)


Lesenswert?

wolf schrieb:
> ist
> es möglich so etwas über funk zu steuern, oder gar nicht besser?

Möglich schon, aber nachdem du 2 Wochen gebraucht hast für eine fehlende 
Masseverbindung, trotz aktiver Hilfe, hättest du längst weisse Haare bis 
du etwas brauchbares empfängst. Fang lieber ganz einfach an.

Gruss Reinhard

von oldmax (Gast)


Lesenswert?

Hi N
na ja, sicherlich, ist es nicht einfach, aber mit dem Projekt hast du 
die Chance, richtig was zu lernen. Wenn es tatsächlich so  ist, das die 
Anzeige weit weg ist, warum nimmst du für die Bedienung nicht einen PC. 
Den Controller läßt du nur die Anzeige machen und die Zeit erfassen. 
Diese Info schickst du dann an den PC der dann die Daten speichert. Auf 
dem PC läßt sich solch eine Anwendung z.B. in Visual Basic schreiben.
Die Anzeige wirst du auf jeden Fall multiplexen müssen. Dazu rufst du im 
Zeitinterrupt jede mSek. den Multiplexer auf. Die aufbereiteten Werte 
stellst du in einem Puffer bereit.
Vorgang:
Anzeige aus ( gem. Anoder oder Kathode)
nächsten Wertecode laden
auf die Segmente schalten
Anzeige ein ( gem. Anoder oder Kathode)
Immer dran denken erst ausschalten.
Gruß oldmax

von Karl H. (kbuchegg)


Lesenswert?

Ich vermute mal, das ganze wird eine Anzeigetafel für eine Sportstätte 
(Fussball?).

d.h. ausser Punktezählen und die 45 Minuten zu zählen, gibts da nichts 
zu tun. PC ist da ein wenig Overkill. Das seh ich so wie der TO.

von wolf (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich vermute mal, das ganze wird eine Anzeigetafel für eine Sportstätte
> (Fussball?).
>
> d.h. ausser Punktezählen und die 45 Minuten zu zählen, gibts da nichts
> zu tun. PC ist da ein wenig Overkill. Das seh ich so wie der TO.

so ist es. ok d.h. ich muss multiplexen. hätte natürlich einen riesen 
vorteil wenn ich so wenig wie möglich kabel brauche.

leider hab ich keine ahnung wie ich das angehen soll.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige

das tut hilft mir auch nicht viel weiter, da ich assembler nur ganz 
wenig beherrsche.

ich hoffe ihr könnt mir zum erfolg verhelfen.

von Karl H. (kbuchegg)


Lesenswert?

wolf schrieb:

> leider hab ich keine ahnung wie ich das angehen soll.
>
> http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige
>
> das tut hilft mir auch nicht viel weiter, da ich assembler nur ganz
> wenig beherrsche.

Und?
Im Abschnitt über Multiplexing ist eine Schaltung und das 
Funktionsprinzip.
Wenn du mit Timern klar kommst, ist es keine Hexerei mehr, wenn man erst 
mal das Prinzip verstanden hat.

Und sooooo schwer ist Assembler dann auch wieder nicht zu lesen.

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.