www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mega32 unterschiedliche Portpegel trotz "gleicher" Initialisierung


Autor: Cyrill J. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich interessiere mich viel für µC's, sodass ich in meiner Freizeit immer 
etwas an den Dinger rumbastle. - An dieser Stelle ist diese Seite/Forum 
phantastisch. - Angefangen mit nem mega8, jetzt mit einem mega32 auf dem 
Pollin-Board. Geproggd wird über einen selbstgebauten 
Parallelport-Programmer mit Hilfe von PonyProg. Entwicklungsumgebung ist 
Eclipse.

Erste Erfahrung mit dem Programmieren von µC's sammlte ich in Assembler 
und versuche mich jetzt in C.
Kenntnisse in Jave, C und C++ sind vorhanden, auch wenns nur die 
Grundlagen sind :)

Zur meinem Problem:
Habe hier eine ganz billige Schaltung: 4-digits 7Segment-Anzeige auf nem 
Board geteckt und bin dabei diese mit dem mega32 anzusteuern, folgendes 
Phänomen ist mir aufgefallen:

Um mir die Arbeit zu sparen, was die Initialisierung der Ports angeht, 
dachte ich an eine kurze und knappe void-funktion: void initPorts(void), 
die entsprechend die Bits in DDRA und DDRC setzen soll, ich also im 
weiteren Verlauf des Hauptprogramms nur noch die PORTx-Zustände ändern 
kann.

WENN ich mit dieser Technik arbeite, und in der main anweise: PORTA = 
0xff;
liegt am PIN4 ein Pegel von 2,55V an, die Restlichen bei um 4,8V

Ändere ich jetzt die Initialisierung dahingehend, dass ich auf die 
initPorts()-Funktion verzichte, und die Initialisierung unmittelbar vor 
der Hauptfunktion setze, dann habe ich auch am PIN4 (PortA) ein Pegel 
von annährend 5V, sprich die LED leuchtet.

Meine Frage jetzt, kann es sein, dass der Compiler da was durcheinander 
bringt ?
Wie können überhaupt 2,55V an einem PIN anliegen ?

Ich hänge entsprechend die Datei mit an, es handelt sich hauptsächlich 
um die Zeilen 43,44 bzw. 64. (Ich weiss, kein toller Code, aber ich 
denke nachzuvollziehen)

Ich kann auch mit einer "direkten" Initialisierung arbeiten, nur wissen 
würde ich es schon gerne, warum sowas auftritt.

Für Eure Hilfe und Zeit danke ich schon mal im Voraus
Gruß
Cyrill

Autor: Sven K. (svenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich das sehe, müsste er beim weiteren compilieren Fehler 
ausspucken.
Versuche mal die Funktionen alle ÜBER!!! der main Funktion zu schreiben.
So müsste er eigentlich beim linken meckern das er die Funtion nicht 
findet.

Gruß Sven

Autor: Tishima (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Fehler beim ATMEGA32 an PORTC, wenn da mal nicht JTAG am Proezessor 
eingeschaltet ist !?

gruß,
Bjoern

Autor: Cyrill J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Bin deinem Rat gefolgt und die Funktionen über der main gesetzt, die 
Prototypen auskommentiert und leider der selbe Effekt, PIN4 2,55V und 
keine Fehler- noch Warningausgabe beim Compilieren.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorwiderstände für die LEDs vergessen? Schaltbild wäre nützlich.

Autor: Cyrill J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, jetzt wirds interessant,

ja, JTAG war gesetzt, jetzt rausgenommen und das Problem bleibt 
bestehen.
Vorwiderstände sind auch da, die digits selbst werden über ein BC548B 
angestuert. -> Pins sind mir an dieser Stelle wichtig :)

wie gesagt, werden die Zeilen 43/44 quasi getoggelt, liegt an PIN4 
entsprechend 2,55V bzw. 5V an. Einmal sichtbar, über die LED, 
anderesseits gemessen. Daraus schließe ich, das der PORT bzw. der PIN in 
Ordnung ist, was, nebenbei, mein erster Gedanke war, dass sich den Port 
zerschossen habe.

Autor: Sven K. (svenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hattest ja schon code laufen, kannst Du mal bitte den Code der 
funtioniert und dann den der nicht funtioniert bitte zeigen.

1. main_running.c / 2. main_failed.c in eine zip-Datei.

Dann kann man das noch besser überprüfen.
Und hast Du einen Schaltplan ?

Gruß Sven

Autor: Cyrill J. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab das jetzt nochmal auf das Wesentliche gekuerzt, um den Unterschied 
zu sehen, habe sogar 2 neue Projekte erstellt und das Verhalten 
reproduziert.
Im Anhang sind die 2 main-Dateien, die den Effekt erzeugen.
Schaltplan habe ich nicht gemacht, da ich alles direkt auf dem 
Steckbrett aufgebaut habe. Allerdings kann ich Fehler dort ausschließen, 
da ungeändert dessen, wird die MCU entsprechend den angefügten Files 
geflasht mit dem erwähnten Effekt.

Jedoch, die Schaltung entspricht diesem hier: 
http://www.klaus-leidinger.de/mp/Mikrocontroller/7...

mit dem Unterschied, dass ich digits mit gemeinsamer Kathode habe.
PortC stuert die digits, PortA die Segmente.

Autor: Cyrill J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahso, eins noch:

Zum Thema JTAGn, das Bit: JTAGEN in PonyProg habe ich wieder gesetzt(wie 
es war), da sonst in beiden Fällen die LED nicht leuchtet.

Meine, das die FuseBit-Geschickte auch irgendwie invertiert ist, doer ? 
sprich 1 -> Deaktiviert, 0 -> aktiviert ?!

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Geproggd wird über einen selbstgebauten
>>Parallelport-Programmer mit Hilfe von PonyProg.

beim pollin board ist doch ein prorammer mit dabei, aber naja^^

Autor: Sven K. (svenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>
#include <avr/interrupt.h>

void initPorts(void)
{
  DDRA = 0xff;
  DDRC |= (1<<DDC0);
}

int main(int argc, char **argv)
{
  initPorts();
  //DDRA = 0xff;
  //DDRC = 0x01;
  while (1)
  {
    PORTC = 0x01;
    PORTA = 0xff;
  }
}

Probiere mal diesen Code.
Das muss jetzt identisch zu dem main_running sein....

Gruß Sven

Autor: Cyrill J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das geht, in der Tat,
jedoch bin ich grad auf Sprung und kann mich erst später um die 
eigentliche Arbeit der MCU kümmern.
Danke schon ma im Voraus, d.h. dass der Linker nicht richtig linkt ?
Werd mir dann angewöhnen müssen alles vor die main zu schreiben.

@Gast, ja Pollin hat auch einen Programmer onBoard, jedoch seriel und 
ich kann keine 2secs länger beim progn warten :) - ausserdem bin ich zu 
faul jedesmal zwischen ISP und UART zu switschen.

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.