-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: RN-Mega2560 blaue LED an PortD5 zum leuchten bringen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2010
    Beiträge
    24

    RN-Mega2560 blaue LED an PortD5 zum leuchten bringen

    Anzeige

    Hallo,

    ich habe das RN-Mega2560 und möchte mit etwas einfachem anfangen. In der Anleitung steht, dass die blaue LED auf dem Board leuchtet, wenn PortD5 auf low ist. Also habe ich eingetragen:

    #include <avr/io.h>

    int main(void)
    {

    PRR1 = 0xFF;
    DDRD = 0x00;
    PORTD = 0x00;
    while(1)
    {
    }
    }

    PRR1 habe ich auf high gesetzt, weil ich gelesen habe, dass PortD5 auch als XCK1 (Clock) für Usart1 dienen kann und high in PRR1 schaltet die Usarts aus.

    Trotzdem bekomme ich ein blaues Leuchten.

    Was könnte verkehrt sein?

    Danke.

    Grüße

    Robert

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Du hast den Port als Eingang konfiguriert. Um PD5 als Ausgang zu konfigurieren, musst Du DDRD auf 0x20 setzen. PRR1 musst Du nicht setzen, nach einem Reset sind die alternativen Port-Funktionen immer ausgeschaltet.

    Gruß,
    askazo
    - Das Leben ist zu kurz, um in C zu programmieren -

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Du sagst die LED leuchtet wenn der Pin low ist. Mit DDRD = 0x00 schreibst du ins Data Direction Register von Port D 0000 0000 rein, was bedeutet das der komplette Port als Eingang konfiguriert ist. Desweiteren setzt du mit PORTD = 0x00 den kompletten Port D auf low. Und wenn du sagst das die LED bei einem Low an dem Pin leuchtet, ist es klar das sie leuchtet wenn du den kompletten Port auf 0 setzt
    Wenn du die LED ausschalten willst musst du erstmal den Port als Ausgang konfigurieren wie es oben steht und dann schreibst du noch:

    PORTD = 0x020;

    Damit schreibst du in dem 5. Bit von dem Port D Register eine 1 und damit deaktivierst du die LED. Die LED auf dem Board ist "Active Low" geschaltet d.h. sie ist Aktiv wenn der Pin wo sie angeschlossen ist low ist. Im Umkehrschluss musst du den Pin also High setzen um sie zu deaktivieren.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2010
    Beiträge
    24
    Hallo,

    danke für die Antworten. Ich habe das Programm entsprechend geändert, aber die LED leuchtet immer noch nicht (ich möchte das sie leuchtet):

    #include <avr/io.h>

    int main(void)
    {

    DDRD = 0x20;
    PORTD = 0x00;
    while(1)
    {
    }
    }

    Ich habe auch schon das Programm wieder ausgelesen aus dem Chip und mit der HEX datei verglichen, die ich reichgeschrieben habe, es ist die gleiche.

    Ich habe auch schon PIND7 (welcher keine anderen Funktionen hat) mit:

    DDRJ |= (1<<PJ7);
    PORTJ |= (1<<PJ7);

    auf Ausgang und High gestellt. Damit müsste ich 5V an dem Ausgang abgreifen können, aber es haut nicht hin.

    Müssen irgendwelche Fusebits angepasst werden, wenn man über ISP programmiert? Kann sonst was falsch sein? Ich gebe nur 5V und GND auf die Platine, sonst nix.

    Danke.

    Grüße

    Robert

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Du musst auch schon den Pin High setzen damit die LED aus geht.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2010
    Beiträge
    24
    Wir missverstehen uns glaub ich. Die LED soll an sein, nicht aus.

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ähm sorry verschrieben. Ich meinte du musst den Pin auf Low setzen damit die LED an geht.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2010
    Beiträge
    24
    Ich habs gefunden. Der Fusebit bootrst musste raus (dissabled) damit er bei Addresse $0000 startet. Dann nochmal programmiert und nun leuchtet die LED.
    UFF

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ja wegen dem Bit startet er bei einer deffinierten Adresse, da dieses Bit für einen Bootloader da ist. Sonst würde man bei jedem programmieren den Bootloader überschreiben. Da der Controller bei dir aber so wie ich das verstanden habe, keinen Bootloader besitzt schreibt er das Programm ab Adresse 0000 in den Flash aber der Controller spricht diese nicht an

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2010
    Beiträge
    24
    Hallo,

    ich will nicht unbedingt wegen jeder Sache einen neues Thema eröffnen, deshalb schreibe ich nochmal hier rein. Ich will den MPU aller x Minuten etwas machen lassen, also:

    unsigned int flag = 0;
    int main {
    TCCR0B |= (1<<CS02) | (1<<CS00); //setzt vorteiler auf 1024
    TIMSK0 |= (1<<TOIE0); //setzt Interrupt bit
    sei(); //aktiviert interrupt
    while (1)
    {do something if flag 3662}
    }
    ISR(TIMER0_OVF_vect)
    {
    flag++;
    }

    Nun funktioniert alles soweit gut, aber die Zeit stimmt nicht. Ausgegangen davon, dass der 2560er 16 MHz hat habe ich folgendes gerechnet:

    16000000 (MPU)/1024 (für vorteiler)/256 (Überlaufbit) = 61, ... pro Sekunde

    Das heißt mal 60 (für 1 Minute) müsste es 3662 mal durchlaufen um eine Minute zu erreichen. Nur sind es in Realität 50 Sekunden (etwa). Ich habe es schon mit 20MHz probiert aber da kommt zuviel bei raus (4578 = 1 Minute 8 Sekunen).

    Welchen Fehler habe ich in meiner Rechnung?

    Danke für die Hilfe

    Robert

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. PIC in Programmiermodus bringen?
    Von katze117 im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 06.05.2010, 21:53
  2. Wie Halogenlampen leuchten lassen?
    Von Jacob2 im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 29.03.2008, 12:17
  3. Amega32 es leuchten nur 4LED's
    Von m.defi im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 13.02.2008, 16:27
  4. Diode mit Pc zum Leuchten bringen (kein Plan)
    Von MischaMV im Forum Elektronik
    Antworten: 35
    Letzter Beitrag: 12.03.2005, 17:30
  5. [ERLEDIGT] blaue segmentanzeigen
    Von krist0f im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 13.06.2004, 02:14

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •