Forum: Compiler & IDEs [c] Blutiger Anfänger hat Probleme mit AVR C++ Programmierung


von Adrian O. (buhmann1)


Lesenswert?

#include <avr/io.h>

int lokalinput;    //Platzhalter für Eingangsinfo
int lokaloutput;  //Platzhalter für Ausgangsinfo


int main(void)
{
  lokaloutput = 0x01;
  DDRD=0x00;  //Datenrichtungsregister D als Eingang deklariert
  DDRB=0xff;  //Datenrichtungsregister B als Ausgang deklariert
  PIND = lokalinput;
while(lokalinput !=0) { PORTB=lokaloutput;
              }

   return 0;
 }

Hi,

ich bin blutiger Anfänger in sachen Programmierung und µC. Habe auch 
vorher nicht programmiert oder ähnliches.
Nun will ich aber damit beginnen bzw habe bereits begonnen und komme 
auch gleich an meine Grenzen. Ich bekomme keinen zyklischen ablauf hin. 
Ich kann das programm zwar übertragen, jedoch führ t es nicht die 
gewünschten Aktionen aus.
ich möchte, dass das prog. die eingange permanent abfragt und wenn ein 
eingang = 1 dann soll er die Ausgänge bzw einen Ausgang schalten. Bisher 
kam nicht der gewünschte erfolg, daher hoffe ich dass sich jemand meiner 
annehmen kann, mir ein paar tipps gibt und mit evtl . aufzeigt was ich 
am prog ändern muss um zu den gewünschten erfolgen zu gelangen.

mfg adrian

von Mark B. (markbrandis)


Lesenswert?

Was hat das Ganze jetzt mit C++ zu tun? ;-)

von LordZiu (Gast)


Lesenswert?

1) Es heißt C, nicht C++
2) Dein Programm beendet sich nach einem Durchlauf.

So läuft es richtig in einer Endlosschleife:
1
int main(void)
2
{
3
  while(1)
4
  {
5
    // tu was
6
  }
7
8
  return 0;
9
}

3) Lies bitte das AVR-GCC Tutorial. Da kannst du super nachlesen, wie 
das mit den Ein- und Ausgängen funktioniert. Mir scheint, dass du das 
Konzept dahinter noch nicht ganz verstanden hast.

4) Bei konkreten Fragen kannst du dann wieder hier posten.

von LordZiu (Gast)


Lesenswert?

Mark Brandis schrieb:
> Was hat das Ganze jetzt mit C++ zu tun? ;-)

Ich verstehe immer nicht, warum hier oft solche unqualifizierten 
Antworten kommen. Aus dem Inhalt seines Textes ergibt sich doch, dass er 
gerade damit anfängt und scheinbar nicht weiß, dass C und C++ 
unterschiedliche Programmiersprachen sind.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

LordZiu schrieb:

> Ich verstehe immer nicht, warum hier oft solche unqualifizierten
> Antworten kommen.

Weil du bereits vor dem Smiley aufgehört hast zu lesen?

von Christoph S. (mixer) Benutzerseite


Lesenswert?

1
#include <avr/io.h>
2
 
3
//int lokalinput;   Braucht man nicht für so eine Aufgabe
4
//int lokaloutput;  Braucht man genau so nicht
5
 
6
 
7
int main(void)
8
{
9
//lokaloutput = 0x01;
10
DDRD=0x00;  //Datenrichtungsregister D als Eingang deklariert
11
DDRB=0xff;  //Datenrichtungsregister B als Ausgang deklariert
12
//PIND = lokalinput;
13
 /*while(lokalinput !=0) { PORTB=lokaloutput;
14
               }*/
15
  while(1){    //Endlosschleife
16
   PORTB=PIND; //Eingangszustände vom Port D (evtl. Taster) werden an Port B
17
 }             //ausgegeben
18
return 0;      //wird nie erreicht
19
}

Du solltest dich erst mal mit einem C Buch befassen (google mal nach 
galileo computing c) bevor du dich auf einen Mikrocontroller stürzt um 
wenigstens Grundkenntnisse im Programmieren hast. Dann kannst du mal das 
AVR-GCC-Tutorial anschauen!

MFG Mixer

von LordZiu (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> LordZiu schrieb:
>
>> Ich verstehe immer nicht, warum hier oft solche unqualifizierten
>> Antworten kommen.
>
> Weil du bereits vor dem Smiley aufgehört hast zu lesen?

Nein, stell dir vor. Ich bin schon groß genug um bis ans Zeilenende zu 
lesen. Mir ist auch durchaus die gewünschte Wirkung des Smileys bewusst.

Aber warum antwortet man denn auf eine Frage wenn der Informationsgehalt 
der Antwort kleiner 0 ist?

Er hätte auch schreiben können: "1 kg = 1000 g". Das ist zwar auch 
korrekt, aber ist in diesem Kontext hier völlig belanglos!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

LordZiu schrieb:
> Aber warum antwortet man denn auf eine Frage wenn der Informationsgehalt
> der Antwort kleiner 0 ist?

Vielleicht, weil man durchaus auch mit einem ironischen Kommentar
darauf hinweisen möchte, dass C eben nicht gleich C++ ist.

von LordZiu (Gast)


Lesenswert?

Das bringt den Fragesteller aber auch nicht weiter.

von Walter (Gast)


Lesenswert?

Adrian O. schrieb:
> PIND = lokalinput;
> while(lokalinput !=0) { PORTB=lokaloutput;

das ist doppelt falsch,
zum einen willst du wohl lokalinput=PIND,
zum anderen musst du diese zuweisung in der schleife machen

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

LordZiu schrieb:
> Das bringt den Fragesteller aber auch nicht weiter.

Nun, du hast ihm doch aber schon geholfen.

von Mark B. (markbrandis)


Lesenswert?

Ich war gerade dabei, meine editierte Antwort abzuschicken (mit Hinweis 
auf Endlosschleife etc.), da macht mir die Foren-Software einen Strich 
durch die Rechnung. Schade, dass man seinen eigenen Beitrag nicht mehr 
editieren kann, sobald ein weiterer im Thread gepostet wurde. Und das 
kommt gar nicht mal sooo selten vor, dass man genau in der Verlegenheit 
ist.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mark Brandis schrieb:
> Schade, dass man seinen eigenen Beitrag nicht mehr
> editieren kann, sobald ein weiterer im Thread gepostet wurde.

Kannst du schon, aber meiner Erinnerung nach nur 15 Minuten lang.
Ist nur dafür gedacht, dass du mal noch schnell einen nachträglich
bemerkten Tippfehler korrigieren kannst oder schnell noch einen
vergessenen Satz anhängen.  Andreas möchte einfach nicht, dass
nachträglich umfangreiche Editierarbeiten vorgenommen werden und
damit Dinge verschwinden, über die vielleicht bereits ausgiebig
diskutiert worden ist.  (Ursprünglich konnte man gar nicht mehr
editieren, die 15 Minuten waren dann der Kompromiss.)

von Stefan E. (sternst)


Lesenswert?

Jörg Wunsch schrieb:
> Mark Brandis schrieb:
>> Schade, dass man seinen eigenen Beitrag nicht mehr
>> editieren kann, sobald ein weiterer im Thread gepostet wurde.
>
> Kannst du schon, aber meiner Erinnerung nach nur 15 Minuten lang.

Andreas hat das geändert. Sobald ein weiterer Post im Thread ist, haben 
sich die 15 Minuten erledigt.

von Mark B. (markbrandis)


Lesenswert?

Stefan Ernst schrieb:
> Andreas hat das geändert. Sobald ein weiterer Post im Thread ist, haben
> sich die 15 Minuten erledigt.

Das war denn definitiv keine Verbesserung. Woher weiß ich denn als 
Nutzer, wann der nächste im Thread posten wird? Eine Editiermöglichkeit 
sollte nicht von Ereignissen abhängen, auf die ich keinen Einfluss habe. 
Das ergibt keinen Sinn.

von Adrian O. (buhmann1)


Lesenswert?

Guten Tag,

ich hätte nicht gedacht, dass diese kurze noob-frage euch in einen 
solchen diskurs stürzen würde;)

wie dem auch sei. ich bin froh dass ihr geantwortet habt. mit eurer 
hilfe läuft das prog nun. und ich gesteh mir ein, dass ich bevor ich das 
tut durchgehe,mir die grundlegenden dinge des c-programmierens anschauen 
werde um auch nur ansatzweise zu verstehen was ich da mache....


leider läuft es nicht so, dass ich mich vor den atmel setze, ihm nach 
der try & error methode ein paar befehle einpresche und es dann so 
funzt, wie ich mir das vorstelle.(Bislang hat das gut geklappt).
zumal ich auch nicht einfach nur die programme über kopieren einfügen 
entwickeln möchte.

nun gut nochmals vielen dank und wenn ich dann in ein paar eonen das 
vermeindlich nötige grundwissen besitze, dann werd ich mich wohl wieder 
hierher verirren;) oder ich verfahre parallel......schaun wa mal


mfg adrian

von Oliver (Gast)


Lesenswert?

Um der vollständigkeit den üblichen, aber hier noch nicht gegeben 
Hinweis auch noch zun geben: Um C (oder überhaupt das Programmieren) zu 
lernen, ist ein Mikrocontroller nicht sonderlich gut geeignet. Das geht 
viel besser auf dem PC.

Oliver

von Rolf Magnus (Gast)


Lesenswert?

> Eine Editiermöglichkeit sollte nicht von Ereignissen abhängen, auf die
> ich keinen Einfluss habe.

Umgekehrt wird ein Schuh daraus. Dein abgesendetes Posting sollte nicht 
von Ereignissen abhängen, auf die du keinen Einfluss hast. Das bedeutet, 
daß, wenn du auf ein Posting antwortest, dieses nicht nachträglich 
nochmal verändert wird und damit deine Antwort evtl. unsinnig wird. Ich 
hätte zumindest keine Lust, ständig alles, was ich gepostet habe, 
daraufhin überprüfen zu müssen, ob sich die vorhergehenden Postings 
inzwischen geändert haben und ich meine Antworten dann nachträglich 
daran anpassen muß.

> Das ergibt keinen Sinn.

Keinen Sinn ergäbe es, wenn sich Postings mitten in einem Thread auf 
einmal ändern könnten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.