www.mikrocontroller.net

Forum: Compiler & IDEs 7-Segmentanzeige: Atmega8 zeigt was anderes an!


Autor: Alois (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo, hab soeben mein erstes Progi auf einem Atmega8 geschrieben und 
lt. Simulator macht es auch das, was es soll. Jedoch die HArdware nicht 
(getestet im STK 500). Hier reagiert zwar die richtige Taste des PORTD, 
aber es leuchten immer die falschen LEDs, diese widerkehren zwar 
jedesmal (9 mal) gleich, aber eben die falschen! Was hab ich falsch 
gemacht? Anbei der Source.
Alois

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne das jetzt grossartig analysiert zu haben:
Ich denke nicht, dass das hier
    if (PIND & 0x01 & merker==0)  
das macht was du dir vorstellst (was immer du denkst das es machen 
würde)

    case 1:  
        PORTB = 0b01001001;
        break;
Hä?
Wenn eine 1 angezeigt werden soll, leuchten doch auf einer 
7-Segmentanzeige keine 3 Anzeigeelemente auf.
Du musst hier einstellen, welche Segmente deiner Anzeige eingeschaltet 
werden soll, wenn myVar eine der Zahlen von 0 bis 9 enthält.

Wo sind eigentlich die cases für die Fälle 8 und 9?

Mach dir eien Zeichnung, auf der die 7 Segmente der Anzeige drauf sind


      +--------+
      |        |
      |        |
      |        |
      |        |
      +--------+
      |        |
      |        |
      |        |
      |        |
      +--------+

dann stellst du fest, welches Segment aufleuchtet, wenn du am PORTB 
1(!)Bit auf 1 setzt und schreibst das daneben hin. zb

          PB1
      +--------+
      |        |
  PB2 |        | PB4
      |        |
      |   PB5  |
      +--------+
      |        |
  PB3 |        | PB6
      |        |
      |   PB7  |
      +--------+

wenn du daher eine 3 anzeigen willst, mussen dieses Elemente 
eingeschaltet werden:

          PB1
      +********+
      |        *
  PB2 |        * PB4
      |        *
      |   PB5  *
      +********+
      |        *
  PB3 |        * PB6
      |        *
      |   PB7  *
      +********+

also PB1, PB4, PB5, PB6 und PB7 auf 1, alles andere auf 0.
ergo

    PORB = 0b11110010;  // Segmente für '5' einschalten


Bei dir werden sich natürlich andere Bitkombinationen ergeben. 
Schliesslich habe ich jetzt einfach nur ein Anschlussschema erfunden.

Autor: Gustav K. (hanibal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
villeicht ist das letzute bit ja der punkt?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der hat gar nichts mit der Anzeige zu tun. Ist doch sogar im Code 
kommentiert:
    DDRB = 0b11111110;//alles Ausg�nge au�er Pin0
  PORTB |= 0b00000001;//f�r Eingang 0 den interen PullUp aktivieren

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alois schrieb:
> (getestet im STK 500)

Dass die LEDs dort low-aktiv (0 = an, 1 = aus) sind, hast du bedacht?

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau, das Bit0 von PORTB sollte (zumindest ursprünglich ) der 
Schalter sein, der mir die Zahl um 1 erhöht.
Dann hab ich den Schalter versuchsweise auf PORTD gehängt. Die Anzeige 
läuft weiterhin über PORTB, Bit 1 bis 8. Ich hab die Anzeige auch im 
Code kommentiert (nach der Switch).
Versuchsweise hab ich unter CASE 1 einemal alle Bits eingeschaltet, also 
PORTB = 255. Zrotzdem leuchtet dasselbe wie vorher (0b00110110 statt 
0b11111111). Und genau das versteh ich nicht. Im Simulator schauts 
richtig aus.

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An Stefan:

Danke für den Hinweis, daß sie lowaktiv sind, hab ich nicht bedachtt. 
Trotzdem kommt ja irgendwas raus und nicht das Komplement.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fang erst mal einfacher an :-)
(Deine ganze Tastenauswertung ist Müll)

#include <avr/io.h>

int main(void)
{
  DDRB = 0b11111110;//alles Ausg䮧e auߥr Pin0

  PORTB = 0b10101010;

  while( 1 )
    ;
}

Leuchten die richtigen LED?

Autor: Alois (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Code Update:

Der Atmel macht schon das, was er soll nur er macht keine Ausgabe auf 
die letzen beiden LEDs am PortB, also wenn ich PORTB = 0b00000000 
schreibe, sollen alle leuchten, jedoch leuchten nur die ersten 6. Die 
LEDS sind aber nicht kaputt, das weiß ich.

Also wenn ich mnit dem Taster am PortD durchschalte, werden jetzt die 
richtigen Segmente angesteuert, außer die beiden letzten. Die rühren 
sich nicht.
Bloss warum?

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zusatz:

CASE 0: 0b00000000;

dient nur zum Testen. Ich weiß, dass das keine 0 ist :)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alois schrieb:

> Der Atmel macht schon das, was er soll nur er macht keine Ausgabe auf
> die letzen beiden LEDs am PortB, also wenn ich PORTB = 0b00000000
> schreibe, sollen alle leuchten, jedoch leuchten nur die ersten 6. Die
> LEDS sind aber nicht kaputt, das weiß ich.

Ähm, wie wird denn der Mega8 getaktet? B6 und B7 sind auch die 
Anschlüsse für einen Quarz.

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Mega8 wird intern (1Mhz) getaktet lt. Fuses.
Ich hab probehalber mal den PORB auf PORTC umgeschrieben, aber da ist 
dasselbe (außer daß die LEDs nun heller leuchten).

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, hab das meiste im Code auskommentiert:
int main(void)
{

  // Achtung: alle Ein- und Ausgänge sind beim STK500 AKTIV LOW!!

  uint8_t  zahl;
  uint8_t merker;
  merker = 0;
  zahl = 0;

         DDRB = 0b11111111;    //alles Ausgänge

  PORTB = 0;  
return(0);
}

selbst dieser Code setzt nur die ersten 6 Ausgänge, und die beiden 
anderen nicht.
Was läuft da schräg?

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist das normal, daß der Mega8 innerhalb weniger Sekunden so heiß wird, 
daß man ihn mit dem Finger nicht mehr gerühren kann??

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du auch den Jumper XTAL abgezogen? Nur Fuses setzen reicht
nicht.

avr

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab jetzt einen anderen Mage8 (neu) ausprobiert, wird genauso heiß 
und das PRogramm in diesem neuen Mega8 läuft gleich ab und setzt 
ebenfalls die beiden letzten LEDs nicht. Kabel vom Port Ausgang zu den 
Leds hab ich auch schon ausgetauscht. Also an der Hardware kanns nicht 
liegen...
Irgendwer eine Idee?

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir wird nicht klar, ob Du jetzt für diese Basis-Tests Deine 
Siebensegment-Anzeigen verwendest oder die LEDs auf dem STK500.

Falls Du die Siebensegment-Anzeigen benutzt, versuche bitte mal die LEDs 
die man mittels Flachbandkabel und Stecker (liegt beim STK500 bei) an 
Port B anschliessen kann.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heiss? Ach Du grosser Turing!
Da musst Du doch ein Problem an der Hardware haben. Schau mal genau die 
Beschreibung des STK500 an und überprüf noch mal alles.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also an der Hardware kanns nicht liegen...

Eines der berühmten letzten Worte, so wie "Rechts kommt keiner" und 
"Gestern ging es noch".

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alois schrieb:
> ist das normal, daß der Mega8 innerhalb weniger Sekunden so heiß wird,
> daß man ihn mit dem Finger nicht mehr gerühren kann??

Dann hast Du Ausgänge kurzgeschlossen oder LEDs ohne Vorwiderstand dran.

Selbst bei 20MHz darf eine Erwärmung nicht fühlbar sein. Nur ein 
Thermometer mit 0,1° Auflösung könnte sie feststellen.


Und wenn Du mal ins Datenblatt des Mega8 schaust, wirst Du sehen, daß 
PB6/7 auch XTAL1/2 sind. D.h. beim STK500 mußt Du sie an PORTE/AUX 
abgreifen.
Steht bestimmt auch im AVRStudio, Help, Tools Users Guide, STK500.


Peter

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab die 3 Kabeln gesetzt so wie es in derAVR Anleitung zum STK 
stand, eins vom ISP6PIN zum SPROG2, um den Mega8 zu programmieren, die 
beiden anderen verbinden PORTB und PORTD mit den Schaltern und LEDs am 
Board.

Ich verwende die LEDs und keine 7 Seg-Anzeige.

Ich verwende den MEga8L um genau zu sein.

Ich werwende ein 12 Volt Netzteil, um das Board zu versorgen.

MEhr muß man auch schon nicht einstellen. Zumindest, was ich gelesen 
hab.

Oder?

Wie warm darf denn der Mega8 werden?

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und wenn Du mal ins Datenblatt des Mega8 schaust, wirst Du sehen, daß
>PB6/7 auch XTAL1/2 sind. D.h. beim STK500 mußt Du sie an PORTE/AUX
>abgreifen.

Eigentlich sollte der TO das wissen, denn er schrieb auf eine 
entsprechende Frage:

>der Mega8 wird intern (1Mhz) getaktet lt. Fuses.

Nur, auf die Frage ob der entsprechende Jumper auf dem STK500 abgezogen 
ist, hat er nicht geantwortet.

Autor: Alois (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nein, auf die Frage, ob der Jumper abgezogen ist, hat er nicht 
geantwortet, weil ers überlesen hat die Frage :)

Ich hab nun den XTAL1 Jumper abgezogen, nun wird der Mega nicht mehr 
warm. Aber dafür fukntioniert das Progi auch gar nimmer. Er gibt auch 
bei den Fuses 100 Einträge, die man auswählen kann Clocksource. Weiß 
jemand, was ich hier auswählen muß?

Er läßt sich jetz auch nicht mehr programmieren, bekommenimmer die 
Fehlermeldung im Anhang...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie warm darf denn der Mega8 werden?

Gar nicht. Wenn er so heiß geworden ist wie beschrieben, ist die 
Wahrscheinlichkeit, daß er dabei Schaden genommen hat, ziemlich hoch.

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
o. Ich hab einen anderen reingesteckt, der läßt sich programmieren. 
Allerdings läuft das Programm nicht mehr also es wird nicht mehr 
getaktet. Man sieht zwar den Einschaltzustand (also die 6 LEDS 
leuchten), aber es tut sich nix. Er läuft nicht zyklisch. D.d. wohl daß 
der Takt fehlt.

Mir istafgefalle, wenn ich XTAL1 wegnehme, leuchte die Leds viel heller 
als wenn er drauf ist. Als ob irgendwo zu viel Strom gezogen wird. Wenn 
ich den XTAL1 setze und den OSCSEL wegnehme, leuchten sie genauso hell. 
Alle anderen Jumperstellungen ziehen zuviel Strom und die Leds leucten 
schwach.

Ich hab nun gelesen, daß man 3 Mögliochkeiten hat, den yC Takt zu 
setzen.

1. STK500 taktet den Mega über eingebauten Oszillator (XTAL1 gesetzt, 
OSCSEL gesetzt auf 12)

2. STK500 taktet den Mega über Software (XTAL1 gesetzt, OSCSEL gesetzt 
auf 23)

3. Mega8 nimmt eingebauten OScillator (XTAL1 offen, OSCSEL ? weiß ich 
nicht)

Wie stelle ich jetzt die Fusebits korrekt ein. Da gibt es sehr viele 
Einträge? Bitte um Unterstützung.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erster Tipp: Datenblatt ;)

weiter:

http://www.mikrocontroller.net/articles/AVR_Fuses

Hilfsfunktion vom Studio

Werde dir erst mal klar was du willst, kpl. PortB nutzen
oder Genauigkeit durch Quarz.

avr

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Link, werd ich mal lesen.
Was ich will, ist mir klar. Ic will den gesamten Port nutzen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du den eingebauten Oszillator verwenden willst, mußt du an den 
Fuses gar nichts einstellen. Der ist schon voreingestellt.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, am besten kontrollierst Du die Fuses trotzdem, denn Du hast sie 
vielleicht verstellt.

Aus der Schaltplanskizze ist erkennbar, das der XTAL1 Jumper die 
Verbindung von der Takterzeugung auf dem STK500 zum uC kontrolliert. 
Daher ist es, wenn XTAL1 offen ist, völlig egal wie der OSCSEL-Jumper 
steht. Zugegeben, man könnte vermuten, das dieser Jumper noch andere 
Auswirkungen hat, aber die hat er nicht. Dem AVR-Studio ist völlig egal 
wie der Jumper steht.

Wenn Du Dir nun die Liste der möglichen Kombinationen für die Takt-Fuses 
anschaust, wirst Du feststellen, das sie benannt sind. Du musst also nur 
die Kombination wählen die Deiner Situation entspricht. Mehr ist nicht 
dahinter.

Autor: Alois (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf:

an den Fuses hatte ich nichts verändert, siehe Bild. Allerdings war 
Default der int. Oscillator eingestellt und ich wußte bis dato nicht, 
daß man dann auch den Jumper XTAL1 entfernen muß.

@Naja:

siehe Bild2.
Wenn ich mit dem beim Mega eingebauten Oszillator arbeiten möchte, muß 
ich den ersten Eintrag auswählen und den XTAL1 entfernen. Dann kann ich 
auch PD6 und PD7 verwenden. Stimmt das?

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was an "Int. RC Osc." verstehst Du denn, verfl...t nochmal, nicht?
Jetzt lies doch mal das verd...te Datenblatt und die Hilfetexte. Wir 
helfen wenn Du uns sagst, was Du nicht verstehst. Aber lesen und vor 
allem entscheiden musst Du alleine.

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke das wars. Thread kann geschlossen werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.