Durch Tastendrucke + 7 Segment Ports Schalten

Aha! Ich sehe.

Beschreibe mal die Symptome. Leuchtet wenigstens irgendwas?
Schreib ein Anderes Programm mit dem du die 7 Segmenanzeigen einzeln testen kannst. Oder auch nur eine LED.

Das probierte Programm ist doch sicher auch das zuletzt von dir gepostete?
 
Hi Finn,

schreib dir doch erstmal eine Miniroutine zussammen, die nur einfach mal
eine der Anzeigen mit allen Segmenten anschaltet.

Also DDR auf Ausgabe und die entsprechenden Ports mit den entsprechenden
Bytes füttern und danach den Mega in einer Endlosschleife schlafen legen.
Sie mal meine FAQ mit der Durchführung von Projekten an. Da mache ich
auch erst mal nen Hardwaretest.

Dann schaltest Du die nächste Anzeige an.
Und zum Schluß testest Du die Dritte.

Dann bist Du die wenigstens sicher das die Verkabelung paßt.

Danach dann nochmal dein Programm reinladen. Und wenn es jetzt nicht
das macht, was es soll und was dreistelliges anzeigt, dann ist da der
Wurm drin.

Dann weißt Du aber wenigstens ob es jetzt an der Verkabelung oder an
deinem Programm liegt.

Gruß
Dino
 
Hallo ihr beiden. Hm, also erstmal zu Dino:
Darüber habe ich nicht nachgedacht. Aber jetzt wo du es sagst, habe ich etwas ein schlechtes gewissen.
Ich werde gleich noch schreiben, dass ich das alles mit der Unterstützung von euch geschafft habe.
Tut mir leid! :(

Zu Nomis:
Ja, dass ist das aktuelle.
Code:
#include <avr/io.h>
#include <util/delay.h>


int main(void)
{
    
    
    DDRC = 0x00; //PORTC auf Eingang stellen
    PORTC = 0xFF; //Sicher gehen das zum Start alle Bits "aus" sind.
    DDRA = 0xFF;  //PORTA als Ausgang (Transistoren)
    DDRD = 0x00;  //PORTD als Eingang zur Vorbeugung von Kurzschlüssen

        while( 1 )
        {
            PORTA |= (1 << PA7); 
            PORTA &= ~(1 << PA7); 

                _delay_ms(1000);

            PORTA |= (1 << PA7); 
            PORTA &= ~(1 << PA7); 

                _delay_ms(1000);
        }    
}
So müsste doch etwas blinken oder nicht?
 
Nein: PortC auf 0x00 (dann sind die Pins gegen Masse)

das in der while(1) ist zwar fast unnötig aber sollte klappen.(blinken wirds aber nicht, nicht sichtbar)
 
Code:
int main(void)
{
   
   
    DDRA = 11100000;        //Datenrichtungsregister für Transen auf Ausgang
    DDRC = 11111111;        // " für 7segmente auf Eingang

    
            
}
Rechte Anzeige: Nichts!
Mittlere Anzeige: Alle außer 5 und 6. (Anhang)
Linke Anzeige: Nichts!


Transistoren passen.
 

Anhänge

  • kingbrightsa5211rt7segmlt7.jpg
    kingbrightsa5211rt7segmlt7.jpg
    11,6 KB · Aufrufe: 4
zum Programm: Für gewöhnlich schreibt man trotzden noch ein while(1) mit dazu. Setz bitte der Klarheit halber auch noch die PORTS A und C auf 0x00.
(du musst es nicht posten.)

Ansonsten sollte aber alles leuchten. Sieh die dir die 2 Transistoren für die äußeren Anzeigen an und schau ob das JTAG Bit aktiviert ist(sollte auf 0 stehen).
 
JTAG ist ein Fuse-Bit oder? Ich finde es aber nicht. Standartmäßig steht es aber auf Aus (0) soweit ich weiß.
 
Hi Finn,

Code:
int main(void)
{
    DDRA = 11100000;        //Datenrichtungsregister für Transen auf Ausgang
    DDRC = 11111111;        // " für 7segmente auf Eingang         
}
?? :confused: ?? Warum schaltest Du den Port für die Segmente auf Eingang ?
Ich dachte du willst damit die Segmente steuern und keine Tasten abfragen.

erst mal den Schaltplan wieder gesucht :D

Also ...
Code:
DDRC = 11111111;  // Alles auf Ausgang Ausgang - Das sind die  Segmente
DDRA = 11100000;  // PA7-5 auf Ausgang - Das sind die Transistoren
PORTC = 00000000; // Alles auf Low da die Segmente die Kathoden sind
PORTA = 01111111;  // Das schaltet den PNP-Transistor an PA7 ein
while( 1 ) 
  {
     // Und eine Endlosschleife bis der Prozessor tot umfaellt ;-)
  }
Was ist da dran so schwer ? Damit sollte auf dem Schaltplan die oberste
Anzeige leuchten (und das obwohl ich kein C kann :D )

Und mit
PORTA = 10111111;
Schaltest Du die nächste Anzeige ein. Und mit
PORTA = 11011111;
kommt die dritte dran.

PORTA = 00011111;
sollte man sich verkneifen, weil ich nicht weiß, was der Mega zu 3 gleichtzeitig
angeschalteten Anzeigen an seinen Pins sagt :D Bruzzel :D

Gruß
dino
 
Habe einen Transistor getauscht und sogar eine 7-Segment-Anzeige. Nichts!
Wenn ich PORTA = 11011111; schalte, leuchtet wieder die mittlere außer die beiden Segmente. Ich glaube ich muss mal neu verkabeln. Obwohl das passen müssten.Soll ich mal den ATMEGA tauschen?
 
Aaaaahhhhhhhh !!!!!!

Hi Finn,

JTAG ist ein Fuse-Bit oder? Ich finde es aber nicht. Standartmäßig steht es aber auf Aus (0) soweit ich weiß.
1. Das nennt sich JTAGEN (JTAG Enable) wenn es da ist.
2. Wenn Du da ne 0 reinschreibst dann ist es AN

Und zwar ...
Wenn man Flash oder EEROM oder EPROM löscht, dann sind die Speicherzellen
auf 1. und wenn man sie beschreibt, dann kann man sie nur mit Nullen
beschreiben (programmieren). Wenn man sie wieder auf 1 haben will,
dann muß man sie wieder löschen.

Kenn ich jedenfalls so :D Korrigiert micht (ich hab ja doch Recht) :p :p

Also JTAGEN = 0 heißt du hast es ANGESCHALTET.
Sieh dir mal die Info zu PonyProg an. Da steht das wunderbar drin.

Gruß
Dino
 
Hi Finn,

Habe einen Transistor getauscht und sogar eine 7-Segment-Anzeige. Nichts!
Wenn ich PORTA = 11011111; schalte, leuchtet wieder die mittlere außer die beiden Segmente. Ich glaube ich muss mal neu verkabeln. Obwohl das passen müssten.Soll ich mal den ATMEGA tauschen?
Nimm dir ne LED und nen Vorwiderstand und dann teste doch einfach
was da aus den Pins rauskommt. Geht aber auch mit nem Voltmeter.
Dann siehst Du doch ob da 0V (GND) oder +5V (VCC) an den Ausgangspins
dranliegen. LED ist aber besser da nen Multimeter mit 10Megaohm
Eingangswiderstand und so ... naja. die Fehlermöglichkeiten und das
interpretieren von Meßergebnissen. Ich glaube das machen wir ein anderes
Mal ;) ;)

Gruß
Dino
 
PORTA = 11111111; => Alle aus
PORTA = 01111111; => Alle aus
PORTA = 10111111; => Mitte an (PA6)
PORTA = 11011111; => Mitte+Rechts an (PA6+PA5)

Witzig oder? (HAHAHA)
:mad::mad::mad::mad:
 
Hi Finn,

Witzig oder? (HAHAHA)
:mad::mad::mad::mad:
absolut unlogisches Ergebnis :eek: :eek: :eek: :eek:

GND----1kOhm-----K(LED)A------zu testender Pin

Das sollte dann bei High (1) an dem Pin leuchten.
und mit

+5V-----1kOhm------A(LED)K-----zu testender Pin

das sollte bei Low (0) am Pin leuchten.

alles ziemlich komisch. Oder der ATmega ist gebruzzelt oder irgendwie
mit Hirnschaden :eek: :eek:

Gruß
Dino
 
PORTA = 11111111; => 5 Volt an PA7 und PA6
PORTA = 01111111; => 5 Volt an PA6
PORTA = 10111111; => 5 Volt an PA7
PORTA = 11011111; => 5 Volt an PA5

So das habe ich gemessen.
Bin erstmal raus. Morgen wieder 5:20 aufstehen. Ciao. Danke!
 
Mist messen ??

Hi Finn,

So das habe ich gemessen.
wie gesagt ...
Traue keinem Multimeter wenn Du nicht genau weißt was Du da wie gemessen
hast ;) ;)
Die haben 10M Ohm Innenwiderstand. Damit kann man sogar ne total leere
Batterie als voll verkaufen :D
Darum das mit der LED. Da weißt Du ob da wirklich Strom fließen könnte.
Bei 10M Ohm kann man sich schnell irgendwoher hochohmig eine Spannung
eingfangen die man dann da mißt wo eigentlich nichts anliegt.
Das nennt man "Interpretieren von Meßergebnissen".

Also ... Munter bleiben :D

Gruß
Dino
 
Hi Finn,

Code:
DDRC = 11111111;  // Alles auf Ausgang Ausgang - Das sind die  Segmente
DDRA = 11100000;  // PA7-5 auf Ausgang - Das sind die Transistoren
PORTC = 00000000; // Alles auf Low da die Segmente die Kathoden sind
PORTA = 01111111;  // Das schaltet den PNP-Transistor an PA7 ein
while( 1 ) 
  {
     // Und eine Endlosschleife bis der Prozessor tot umfaellt ;-)
  }
manchmal sollte man über manche Probleme erst mal schlafen ...
Heute morgen ist mir was in den Kopf gekommen ...

DDRA = 11100000

Ich schätze, dieses 11100000 wird vom Compiler als Dezimalzahl interpretiert
und nicht als Binärzahl. Wie schreibt man bei C eine Binärzahl ??
Auch wie in Assembler ?? ...

DDRA = 0b11100000

?? :confused: :confused: ??
Ich schätze mal, das darum die Pins die falschen Pegel haben.

Gruß
Dino
 
Eine Binärzahl fängt in C(ist aber kein C-Standard) mit 0b an.

Das mir das nicht augefallen ist.:rolleyes:
 
Hallo,
Ja in C werden Binärzahlen mit 0b.... begonnen
ich würde noch in die while schleife ein NOP packen damit die nicht
wegoptimiert wird!
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)