Atmega8: I/O funktioniert nicht vollständig

Gast #2594242
Lesenswert?

Hallo µC-Gemeinde.

Ich beschäftige mich erst seit Weihnachten mit der µC-Programmierung. 
komme mit der wenigen Zeit die ich habe ganz gut voran, doch nun ists 
Zeit für meinen ersten Beitrag.

Habe jetzt meine erste eigene Schaltung fertig, doch leider macht der 
Atmega8 nicht das was er soll.

An PortD sind 8 Taster und an PortB sind 8 LEDs.
zum Testen habe ich folgendes kleines Programm:

#include <avr/io.h>
#include <inttypes.h>

int main(void)
{
  DDRD = 0b00000000;
  DDRB = 0b11111111;

    while(1)
    {
  uint8_t temp = PIND;
  PORTB = temp;
    }
}

Problem: es leuchten bei Knopfdruck nur die LEDs an PB0, 6 und 7 (Quarz 
ist intern)

Bisherige Erkenntnis: Die Schaltung funktioniert einwandfrei, wenn ich 
ohne µC die entsprechenden Stellen brücke (z.B. von PD3 auf PB3 im 
Sockel), dann leuchten alle LEDs.
Habe 2 verschiedene Atmega8 ausprobiert => beide bringen das gleiche 
Resultat.

Im Forum und auch bei Google ließe sich leider nichts finden, denn dort 
Fragen alle nur nach PB6 und PB7 (Quarz extern auf intern, aber das geht 
ja)

Fuses gibts im Anhang

Hoffe ihr habt einen hilfreichen Tipp für mich.

mfg

Peter
Angehängte Dateien:
Gast #2594266
Lesenswert?

> PortD sind 8 Taster

Nur die Taster oder auch externe Pull-up (wenn die Taster zu GND 
schalten) oder Pull-down Widerstände (wenn die Taster zu Vcc schalten) 
so wie im AVR-GCC-Tutorial beschrieben? Interne Pull-Up Widerstände 
benutzt du ja keine, wie im Code zu sehen ist.

Hast du an den PB-Pins noch etwas anderes als die LEDs (und ihre 
Vorwiderstände) angeschlossen? Vielleicht den ISP-Programmieradapter 
oder einen USB-to-TTL Chip wie auf den Arduinoboards?

Es wäre sicher nicht verkehrt, wenn man deine Schaltung mal sehen 
könnte.
Gast #2594316
Lesenswert?

> ich habs in beispielen im internet bisher nur so gefunden

∗hust∗ die einzige verlässliche Quelle anzapfen: den Hersteller. Im 
Speziellen: dessen Dokumentation in Form des Datenplatts.

AREF auf GND gibt einen hüpschen Kurzschluss sobald man AVcc oder Vref 
aktiviert.
Gast #2594323
Lesenswert?

Jetzt mit dem Schaltplan bin ich ratlos, besonders zusammen mit diesem 
Statement

> Bisherige Erkenntnis: Die Schaltung funktioniert einwandfrei, wenn ich
> ohne µC die entsprechenden Stellen brücke (z.B. von PD3 auf PB3 im
> Sockel), dann leuchten alle LEDs.

Wenn die LED beim Drücken von SW5 und Drahtbrücke zwischen PD3 und PB3 
funktioniert, sehe ich kein Hindernis, warum es das Programm oben nicht 
auch tun soll.

Als nächster Schritt würde ich prüfen, was aus dem C-Code kompiliert und 
als Arbeitsanweisung in den Atmega8 geschrieben wurde. Vielleicht hat 
sich auf diesem Zwischenstück ein Bug eingeschlichen.

Zum Kontrollieren kann man den Flashinhalt auslesen und die dabei 
entstehende HEX-Datei disassemblieren. Wenn du nicht selbst 
disassemblieren kannst, hänge die ausgelesene HEX-Datei in den Anhang.
Gast #2594357
Lesenswert?

Das disassemblierte Programm macht im Simulator was der C-Code 
vorschreibt. Ein Rätsel!

Jetzt kannst du prüfen, ob Eingangsstufen an PIND oder Ausgangsstufen an 
PORTB zerschossen sind.

Dazu das Programm so schreiben, dass die funktionierenden Eingabepins 
(0,6,7) andere Ausgabepins (1,2,3 oder 3,4,5) aktivieren können.

Und umgekehrt, ob die nicht funktionierende Eingabepins (1,2,3 oder 
3,4,5) funktionierende Ausgabepins (0,6,7) aktivieren können.

Die Ausgabepins kannst du auch leichter prüfen, wenn du mal ein 
Lauflicht drüber laufen lässt (dann aber mit eingeschalteter Optimierung 
kompilieren)

1
#include <avr/io.h>
2
#include <inttypes.h>
3
#include <util/delay.h>
4

5
int main(void)
6
{
7
  uint8_t bit = 0;
8

9
  DDRD = 0b00000000;
10
  DDRB = 0b11111111;
11

12
  while(1)
13
  {
14
    PORTB = (1<<bit);
15
    bit += 1;
16
    bit %= 8;
17
    delay_ms(250);
18
  }
19
}
Gast #2595525
Lesenswert?

soo... zurück von der arbeit und gleich ans werk gegangen

ich hab das mal alles so durchgetestet.
die eingänge funktionieren alle, nur die ausgänge nicht
werden wohl defekt sein :'(

aber warum denn dann an zwei controllern genau die selben Pinne?
hoffe mal dass das Evaluationboard keinen knacks hat und mir die µCs 
schrottet
Gast #2611837
Lesenswert?

so.. nach langer zeit mal ein update.

auf den beiden genannten µCs geht der selbe Code bei gleicher Platine 
nun, was da schiefgelaufen ist vorher weiß ich leider nicht.

trotzdem vielen dank an alle beteiligten

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren