mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED an AtMega 128


Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Eine ganz spezielle Frage.
Hat jemand mit einem ATMega128-16AI schon eine Led (1,5V 20mA) an einem
Pin (z.B. am Port F) zum leuchten gebracht.
Geschaltet wird der Widerstand gegen den Pin und gegen VCC.
Bei meinen Schaltungen (2 Stück und mit 2X 128er) habe ich entweder
5Volt (5Volt gegen 5Volt am Pin => leuchtet nicht) oder 4,1Volt (am Pin
=> leuchtet auch nicht) am Pin.

Können die 128 vielleicht nicht so viel schalten wie die anderen oder
habe ich womöglich 2 defekte????

Gruß

Wolf4124

Autor: Florian D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Geschaltet wird der Widerstand gegen den Pin und gegen VCC."
Wo hast Du dann die LED hingebaut?

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Upps.

Sie wird doch nicht.... Nein. Sie ist noch nicht unter den Tisch
gefallen.

Den Widerstand mit der Led in Reihe und dann auf VCC und das andere
Ende an den Pin.
(;-)

Autor: Florian D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind die Pull-Ups ausgeschaltet?

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollten sie sein.
Habe mit 0xff geladen.

  DDRF = 0xff;

Autor: M. M. (miszou)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

JTAG und Atmega103 Modus bei in den Fuses ausgeschaltet?

Gruß MISZOU

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVCC angeschlossen oder wie das hieß?

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

JTAG habe ich gerade ausgeschaltet (keine Änderung)
103 war schon ausgeschaltet.

Gruß

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

AVCC liegt auf 5 Volt.

Gruß

Autor: M. M. (miszou)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

LED richtig gepolt?
Zeig mal dein Programm, mit dem du die Pins ansteuerst.


Gruß MISZOU

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hier die Daten.


// CPU ist eine ATMega 128

#include <avr\io.h>          //Einfügen der Headerdatei für die Namen 
der
AVR Register usw.
#include <stdint.h>          //Weis noch nicht wo für

//Deklaration der verwendeteten Funktionen im Programm
int main(void);          //Main
int init_avr(void);        //INIT vom AVR

int main(void)
{
  int init_avr(void);

  PORTF = 0xff;      //oder auch mit 0xff; probiert
}

int init_avr(void)
{

//Initalisierung des AVR
DDRF = 0xff;        //Port F als Ausgang setzen
}

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   PORTF = 0xff;      //oder auch mit 0xff; probiert

Wie "oder auch"? Wenn du den Port auf 0xff setzt, siehst du natürlich
bei nach Vcc geschalteten LEDs nichts.

Aber dein Problem liegt vermutlich darin, daß du init_avr() in main()
nochmal deklarierst, statt es aufzurufen. Daher wird dein DDRF nie
gesetzt.

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Hilfe.
Es lag doch am Program.

DDRF = 0xff;        Falsch
DDRF = 0xFF;        Richtig

Aber da muß man erst drauf kommen.

Gruß

Wolf4124

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??
Das soll stimmen?
Also bei mir geht 0xff auch ma mega 128 aber ich kann mir nicht
vorstellen, dass eine LED zwischen VCC und PinF0 oder PinF1 leuchtet,
wenn Port F 11111111 ist, wiel die LED dann zwischen VCC und VCC* liegt
was nicht wirklich einen hinreichenden Potentialunterschied bewirkt
0x00 hingegen würde die Portpins auf GND legen, was bei richtiger
polung zu leuchtenden LEDs führen würde ...

Autor: Karl heinz Buchegger (heinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolf4124

> Aber da muß man erst drauf kommen.

Das war hoechstens Zufall

Hier:

int main(void)
{
  int init_avr(void);

Das hier, ist kein Funktionsaufruf. Das hier deklariert,
dass es irgendwo eine Funktion namens init_avr gibt, die
nichts annimmt und einen int zurueckgibt. Nicht mehr und nicht
weniger. Es ist insbesondere kein Funktionsaufruf!


int main()
{
  init_avr();

Das hingegen ist ein Funktionsaufruf.

Da Deine init_avr nicht aufgerufen wurde, wurde natuerlich auch
DDRF = 0xff;
nicht ausgefuehrt und damit sind deine Ports nicht richtig
programmiert.

Ob du 0xff oder 0xFF schreibst, ist in C voellig egal (es sei
denn der Compiler hat einen schweren (!) Fehler. Der waere
aber sicher auch den Programmieren des Compilers aufgefallen.
Ein Compiler kriegt normalerweise immer eine umfangreiche Sammlungen
an Testcode zu schlucken, es wird das resultierende Programm
Byte fuer Byte mit einer Musterloesung verglichen und jeder
Abweichung nachgegangen).

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Natürlich war Zufall. (;-)
Ich habe aber auch die Funktion auf "init_avr();" geändert gehabt.
Und es ist auch nicht gegangen.

Ich habe auch noch in der Zeile von
"PORTF = 0xff;      //oder auch mit 0xff; probiert"
auf
"PORTF = 0x00;
geändert. Am sieht es ja auch noch an dem Komentar, das ich da etwas
probiert habe.
Aber erst nach der Änderung von ff auf FF ging es.
Das mit dem Funktionsaufruf wird sicher auch ein Fehler gewesen sein.
Ich arbeite mit AVR-GCC.

Aber nochmal danke für eure Hilfe.

Gruß

Wolf4124

Autor: mirki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie ist mir Deine Vorgehensweise schleierhaft.

Wenn Du ne LED in Serie mit einem Widerstand zwischen I/O Pin und VCC
schaltest ( über die Polung brauchen wir ja nicht reden, oder ? ), dann
machst Du das oberflächlich gesehen so:

PINA1 als Ausgang setzten
PINA1 auf High Pegel bringen
und zum leuchten musst du einfach :
PINA1 auf LOW bringen

Das ist eigentlich alles !

Also bei High kein Licht bei Low Licht !!!

mirki

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowie ich es sehe habe ich zwei Fehler bei der Funktion

PINA1 als Ausgang setzten   (bei mir PortF)

gehabt.

Gruß

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.