LED blinken lassen funktioniert nicht wenn ich nur den entsprechenden Pin als Ausgang setze

Gast #4823930
Hallo,
ich habe ein merkwürdiges Problem, woran ich als Anfänger scheiter. Ich 
habe ein Arduino Uno, den ich habe, da hier alles drauf ist (quarz, 
Programmierschnittstelle, Kondensatoren usw). Programmieren tu ich aber 
über atmelstudio in normalem C.

Es ist ja eine LED an PB5 (arduino Pin13) angebracht. Diese möchte ich 
blinken lassen
1
#define F_CPU 16000000UL
2
#include <util/delay.h>
3
#include <avr/io.h>
4

5

6
int main(void)
7
{
8
    DDRB |=  PINB5;
9
    PORTB |= PORTB5;
10
  while(1){
11
      PORTB ^= ( 1 << PORTB5 );
12
        _delay_ms(1000);
13

14
  }
15
  
16
}

Aber die LED bleibt an.
tausche ich die Zeile
DDRB |= PINB5 mit
DDRB |= 0xFF
funktioniert es.
aber warum funktioniert das nicht, wenn ich nur PINB5 als Ausgang setze? 
habe auch alle anderen probiert (einfach die zahlen von 0 bis 7 (aus 
iom328p.h)) aber nie fängt die an zu blinken.
Gast #4823941
Jonas schrieb:
> DDRB |=  PINB5;

Diese Zeile übersetzt sich zu

DDRB |= 5;

Setzt sich in Bits zusammen aus  0000_0101

Das Bit 5 das du setzen willst ist nun nicht dabei....

Ebenso verhält es sich mit Zeile

PORTB |= PORTB5;

Hier machst du es richtig, du benutzt PORTB5 zu shiften:

Jonas schrieb:
> PORTB ^= ( 1 << PORTB5 );
Gast #4823952
Doof. Ich ärgere mich. Vor allem, weil ich es in der while-Schleife 
richtig gemacht habe.
war ja klar, dass es ein banaler Fehler war. Aber als Anfänger sieht man 
das dann doch nicht immer.
Ich danke euch allen für die schnelle hilfe. Dann kann ich jetzt den 
Timer in angriff nehmen.
#4823972
Das finde ich in der Header:
1
#define PORTB   _SFR_IO8 (0x05)
2
/* PORTB */
3
#define PB7     7
4
#define PB6     6
5
#define PB5     5
6
#define PB4     4
7
#define PB3     3
8
#define PB2     2
9
#define PB1     1
10
#define PB0     0

für mich sieht das nicht so aus, als würde man PORRTB an dieser Stelle 
schreiben dürfen!?

Wenn ich die Header "Portpins.h" implementieren würde, dann würde das 
meiner Meinung nach funktionieren wie es oben geschrieben wurde, ohne 
diese Header nicht.
1
#if defined(PB5) && !defined(PORTB5)
2
#  define PORTB5 PB5
3
#elif defined(PORTB5) && !defined(PB5)
4
#  define PB5 PORTB5
5
#endif
Oder beachte ich da irgendwas nicht?
Gast #4823980
Robin F. schrieb:
> für mich sieht das nicht so aus, als würde man PORRTB an dieser Stelle
> schreiben dürfen!?

Für mich sieht es so aus dass man überall PORRTB schreiben darf.
Man muss nur mit den Konsequenzen daraus umgehen können.
Gast #4824008
Das Problem bei mir ist, dass ich PB5 nicht schreiben kann, da es 
niergends definiert ist. irgendwie habe ich die avr/io.h nicht. Wenn die 
öffnen möchte, passiert einfach nichts. in der header iom328p.h ist PB5 
auch nicht definiert, sondern PINB5. Daher habe ich das so geschrieben.
Gast #4824016
Jonas schrieb:
> Das Problem bei mir ist, dass ich PB5 nicht schreiben kann

Du musst sicherstellen (welches Studio verwendest du?) dass
du deinen Prozessor im Studio-Projekt definiert hast. Wenn
dies der Fall ist dann müsstest du auch die gewünschten
Bezeichnungen verwenden können.
Gast #4824018
Jonas schrieb:
> irgendwie habe ich die avr/io.h nicht

Hauptsache du sagst das nicht deinem Compiler. Sonst weigert der sich 
noch plötzlich, deinen Code zu kompilieren ;-)
Offensichtlich findet der die.

Oder guck in der portpins.h nach. Da ist auch PB5 definiert.
Gast #4824029
Wenn ich in der Solution direkt danach suche, wird mir die auch 
angzeigt. (Vorher wollte ich mit rechtsklick -> go to implementation)
aber hier wird nur die oben erwähnte header includiert

#elif defined (_AVR_ATmega328P_)
#  include <avr/iom328p.h>

und in dieser steht kein PB5 :(
Gast #4824035
Jonas schrieb:
> irgendwie habe ich die avr/io.h

#include <avr/io.h>

muss in deiner Source stehen.

Wenn das nicht funktioniert solltest du nochmal ein Projekt
neu anlegen und deinen Sourcecode in die Datei main.c
hereinkopieren.

Leider kann man bereits beim Anlegen im (komplizierten)
Studio 7 einiges falsch machen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.