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
Ohne das jetzt grossartig analysiert zu haben:
Ich denke nicht, dass das hier
1
if(PIND&0x01&merker==0)
das macht was du dir vorstellst (was immer du denkst das es machen
würde)
1
case1:
2
PORTB=0b01001001;
3
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.
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.
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?
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.
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).
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?
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.
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.
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
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?
>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.
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...
> 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.
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.
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
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.
@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?
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.