Forum: Gesperrte Threads AVR Tutorial


von Andreax (Gast)


Lesenswert?

Hallo Forum,
ich beschäftige mich seit einiger Zeit mit uCs und ich weis noch dass, 
als ich Anfänger war, ich über jede Hilfe froh war. Deshalb will ich 
auch mal was zurückgeben. Nach und nach werde ich das Tutorial 
erweitern. Das Tutorial ist theoretisch und praktisch aufgebaut also 
kann bestimmt jeder was mit anfangen.


Erst mal die Grundlagen

Logikpegel
Wenn der Pegel 5V ist bedeutet das High oder 1
Wenn der Pegel 0V ist, also keine Spannung angeschlossen, bedeutet das 
Low oder 0

Es gibt auch 3.3V Logik, dann ist 3.3V High


Taktfrequenz
Mit dem Quarz an Xtal 1,2 bringt man quasi den uC zum schwingen. Ohne 
Takt leistet der uC nichts.


Ports
Jeder Port hat 8 Pins. Die können Eingänge oder Ausgänge sein. Jeder Pin 
kann 20mA liefern, also könnte man zB 8 normale LED betreiben, Bei 4 
Ports sind das bis zu 32 LED. Jede LED kann man dann einzeln ansteuern

Mit DDR und dem Portbuchstaben kann man die Richtung der Ports 
festlegen.

Beispiel DDRA=145;
Die Pins werden binär geschaltet. D h 145 wird intern nach binär 
umgewandelt. 145 entschlüsselt ist 10010001. 1 bedeutet Ausgang und  0 
bedeutet Eingang. Also Hat Port d jetzt drei Ausgänge.

Das umwandeln kan man selbst machen oder man benutzt ein Tool wie 
http://acc6.its.brooklyn.cuny.edu/~gurwitz/core5/nav2tool.html

Mit PIN und dem Portbichstaben kann man den Pegel einlesen.

Beispiel: DDRB=0;
  int a=PINB;

Ein typischer Anfängerfehler zB int a=PORTB; zu schreiben. Das geht 
nicht. Wenn man jetzt nur an Pin 3 High dranlegt, dann wird a=8

Mit PORT und dem Portbuchstaben kann man den Pegel ausgeben.

Beispiel: DDRB=255;
    PORTB=127;

Nun ein einfaches Beispiel um mit einem Taster an Port B Pin 1 eine LED 
an Port a Pin a anzusteuern

DDRA=255;
DDRB=0;
PORTA=0;

while(1)
{
int a=0;
a=PINB;
if( PINB==1) PORTA=1;
}

Achtung: auch hier ist es ein typischer Anfängerfehler in der if Klammer 
= statt == zu benutzen.


Ende der ersten Lektion


Viel Spass und bis bald

: Verschoben durch Moderator
von Pappnase (Gast)


Lesenswert?


von Andreax (Gast)


Lesenswert?

Meins ist aber für C und meins ist didaktisch mehr für Hobby Anwender 
und nicht für Informatiker.

von Cyblord -. (cyblord)


Lesenswert?

So ein quatsch aber auch. Es gibt auch ein AVR-GCC Tutorial. Dein 
Geschreibsel ist gruselig, wer soll da was lernen? Du scheinst selber 
noch auf Anfängerniveau festzuhängen.

gruß cyblord

von Pappnase (Gast)


Lesenswert?


von Hunt W. (hunt_work_er)


Lesenswert?

Andreax schrieb:
> Beispiel DDRA=145;
> Die Pins werden binär geschaltet. D h 145 wird intern nach binär
> umgewandelt. 145 entschlüsselt ist 10010001. 1 bedeutet Ausgang und  0
> bedeutet Eingang. Also Hat Port d jetzt drei Ausgänge.

schreib das doch direkt in binärschreibweise:

DDRA=10010001;

oder mit bitmanipulation. steht ber alles im AVR-GCC Tutorial

von Andreax (Gast)


Lesenswert?

cyblord ---- schrieb:
> So ein quatsch aber auch. Es gibt auch ein AVR-GCC Tutorial. Dein
> Geschreibsel ist gruselig, wer soll da was lernen? Du scheinst selber
> noch auf Anfängerniveau festzuhängen.
>
> gruß cyblord

Wenn da ein Fehler drin ist kannst du doch darauf hinweisen. Das wäre 
konstruktiv. Man muss kein Profi sein um ein Tutorial zu schreiben. Aber 
Anfänger bin ich auch nicht mehr..

von Chris (Gast)


Lesenswert?

Andreax schrieb:
> Meins ist aber für C und meins ist didaktisch mehr für Hobby Anwender
> und nicht für Informatiker.

Ist das AVR-GCC-Tutorial hier auch :-)

von spess53 (Gast)


Lesenswert?

Hi

>Beispiel DDRA=145;

Das ist die dümmste Möglichkeit, die es gibt!

Entweder

 DDRA=0b10010001;

oder

 DDRA=1<<PA7|1<<PA5|1<<PA0;

>Jeder Port hat 8 Pins

Nicht unbedingt. Wie soll das z.B. bei einem 6- oder 8-pol. IC gehen?

.....

>Ende der ersten Lektion

Nichts für ungut. Aber wenn du dich nicht lächerlich machen willst dann:

Ende des Tutorials

MfG Spess

von Thomas E. (thomase)


Lesenswert?

Andreax schrieb:
> Viel Spass und bis bald
Lass' man gut sein.
Du solltest erstmal selbst ein Tutorial lesen und verstehen, bevor du 
versuchst eins zu schreiben.

Andreax schrieb:
> Man muss kein Profi sein um ein Tutorial zu schreiben.
Doch.

Andreax schrieb:
> Aber Anfänger bin ich auch nicht mehr..
Doch.

Andreax schrieb:
> Wenn da ein Fehler drin ist kannst du doch darauf hinweisen.
Einer würde ja noch gehen.

mfg.

von set (Gast)


Lesenswert?

also für ein anfänger, der gleich losprogrammieren will ist das 
vielleicht hilfreich aber für mich persönlich wären das zu wenig infos. 
meiner meinung nach sollte ein einsteiger erstmal die ganzen grundlagen 
kennen bevor er anfängt zu programmieren.

von Andreax (Gast)


Lesenswert?

Hallo ich wollte doch nur behilflich sein. Warum werde ich angegriffen. 
Ich werde das Tutorial vielleicht modifizieren. Lasst mir etwas Zeit. Es 
ist für Anfänger. Gruß

von Cyblord -. (cyblord)


Lesenswert?

Andreax schrieb:
> Es ist für Anfänger. Gruß

Es hilft einem Anfänger nicht, wenn er halbgare Infos von einem Anfänger 
bekommt. Im Gegenteil.

von Andreax (Gast)


Lesenswert?

Hier schon die Erweiterung

Statt DDRA=145 kann man auch den Wert auch direkt schreiben damit der uC 
den Wert nicht umwandeln muss.

DDRA=10010001; Quelle Hunt Worker
DDRA=0b10010001; Quelle Spess
DDRA=1<<PA7|1<<PA5|1<<PA0;

Nicht jeder Port hat 8 Pins. Es gibt Avr mit weniger als 8 Pins und die 
können natürlich keinen 8 Pin Port haben.

Also wie gesagt bis demnächst. Gruss

von Cyblord -. (cyblord)


Lesenswert?

Andreax schrieb:

> Wenn da ein Fehler drin ist kannst du doch darauf hinweisen.

Deine Ausdrucksweise ist total falsch, zu einem Tutorial gehören auch 
die Einführung in die Fachausdrücke:

> if Klammer
Das da drinn ist eine Bedingung.

> Mit dem Quarz an Xtal 1,2 bringt man quasi den uC zum schwingen.
Klar, der Controller schwingt. Super ausgedrückt. Und wo ist der interne 
Oszillator abgeblieben?

> Jeder Port hat 8 Pins.
Gibt genügend AVRs wo das einfach nicht stimmt.

Grausige Codebeispiele. Spaghetticode vom feinsten.

Lass es, du bist selber noch Anfänger und musst noch viel lernen bevor 
du anderen was beibringen kannst.

> Statt DDRA=145 kann man auch den Wert auch direkt schreiben damit der uC
> den Wert nicht umwandeln muss.

Willst du die Leute verarschen? Da muss der Controller doch nichts 
umwandeln.

> Also wie gesagt bis demnächst.
Hoffentlich nicht....

gruß cyblord

von Oliver (Gast)


Lesenswert?

Andreax schrieb:
> Statt DDRA=145 kann man auch den Wert auch direkt schreiben damit der uC
> den Wert nicht umwandeln muss.

Der Vollständigkeit halber solltest du noch erklären, wie der uC einen 
Wert wie 145 in 0b10010001 oder auch  1<<PA7|1<<PA5|1<<PA0 umwandelt, 
und welche der drei gezeigten Möglichkeiten falsch ist.

Oliver

von spess53 (Gast)


Lesenswert?

Hi

>Statt DDRA=145 kann man auch den Wert auch direkt schreiben damit der uC
>den Wert nicht umwandeln muss.

Quatsch. Der Controller muss nichts umrechnen, das macht der Compiler. 
Es geht um die Lesbarkeit .

>Es gibt Avr mit weniger als 8 Pins und die können natürlich keinen 8 Pin >Port 
haben.

Es gibt auch grosse AVRs mit unvollständigen Ports.

Wie viel Unsinn soll das noch werden?

MfG Spess

von Andreax (Gast)


Lesenswert?

Oliver schrieb:
> Andreax schrieb:
>> Statt DDRA=145 kann man auch den Wert auch direkt schreiben damit der uC
>> den Wert nicht umwandeln muss.
>
> Der Vollständigkeit halber solltest du noch erklären, wie der uC einen
> Wert wie 145 in 0b10010001 oder auch  1<<PA7|1<<PA5|1<<PA0 umwandelt,
> und welche der drei gezeigten Möglichkeiten falsch ist.
>
> Oliver

Ich hab das nur übernommen von den Komentaren. Ich bin vertraut mit 
meiner Weise (147) was doch funktioniert, also kann ich zu ihren Sachen 
nichts sagen.

von MisterT (Gast)


Lesenswert?

DDRA = 0b10010001 ist btw die eleganteste Möglichkeit.

Der uC kann den Wert, da er ja binär ist, direkt in das Register DDRA 
schreiben und spart sich 2 Takte, die er normal zum Umwandeln Dezimal 
<=> Binär bräuchte.

Schlimm wirds bei den Atinys, die haben keine Hardwareeinheit zum 
Umrechnen, deshalb muss der Vorgang in Software nachgebildet werden.

Hoffe beigetragen zu haben!

von Chris (Gast)


Lesenswert?

Andreax schrieb:
> Statt DDRA=145 kann man auch den Wert auch direkt schreiben damit der uC
> den Wert nicht umwandeln muss.
Der µC muss den Wert nicht "umwandeln". Das erledigt schon der Compiler. 
Sieh einfach ein, dass dein Verständnis bei Weitem noch nicht ausreicht. 
Und das ist wirklich nicht böse gemeint!
Versuche vielleicht zunächst einmal die Funktionsweise eines Compilers 
und vor allem die interne Architektur des µC zu verstehen. Letzteres 
wird dir am besten gelingen wenn Du zunächst einmal Assembler lernst und 
verstehst. Dafür gibt es jedoch bereits ein sehr gutes Tutorial hier ;-)

von MWS (Gast)


Lesenswert?

MisterT schrieb:
> Der uC kann den Wert, da er ja binär ist, direkt in das Register DDRA
> schreiben und spart sich 2 Takte, die er normal zum Umwandeln Dezimal
> <=> Binär bräuchte.
>
> Schlimm wirds bei den Atinys, die haben keine Hardwareeinheit zum
> Umrechnen, deshalb muss der Vorgang in Software nachgebildet werden.

Das ist jetzt nicht Dein Ernst.
Selten so einen Quatsch gelesen.

von Oliver (Gast)


Lesenswert?

MisterT schrieb:
> Hoffe beigetragen zu haben!

Du hast das Niveau des "Tutorials" auf jeden Fall voll getroffen ;)

Oliver

von Alex (Gast)


Lesenswert?

MWS schrieb:
> MisterT schrieb:
>> Der uC kann den Wert, da er ja binär ist, direkt in das Register DDRA
>> schreiben und spart sich 2 Takte, die er normal zum Umwandeln Dezimal
>> <=> Binär bräuchte.
>>
>> Schlimm wirds bei den Atinys, die haben keine Hardwareeinheit zum
>> Umrechnen, deshalb muss der Vorgang in Software nachgebildet werden.
>
> Das ist jetzt nicht Dein Ernst.
> Selten so einen Quatsch gelesen.

Dein Beitrag ist aber auch nicht gerade so super. Statt nur zu sagen, 
dass es Quatsch ist, darfst du auch gerne schreiben, wie es richtig ist. 
Sonst ist dein Beitrag nicht viel besser.

Gruß

von walTTer (Gast)


Lesenswert?

Andreax schrieb:
> Mit dem Quarz an Xtal 1,2 bringt man quasi den uC zum schwingen. Ohne
> Takt leistet der uC nichts.

auch falsch- der uc arbeitet im auslieferungszustand mit internem takt 
ohne externen quarz.

bin selbst anfänger und deine idee ein tutorial für den schnellen 
einstieg zu schreiben find ich gut.
meine weisheiten (avr betreffend) habe ich hier aus dem forum und mich 
dafür an anderer stelle auch schon artig bedankt. aber in dem bemühen 
der AVR Tutorial autoren das thema allumfassend darzustellen sieht der 
anfänger den sprichwörtlichen wald vor bäumen nicht mehr.
eine geradeausanleitung- wie ein rezept wäre für einen einsteiger da 
sicher hilfreicher.

man sollte allerdings wissen wovon man redet;-)

walTTer

von Falk B. (falk)


Lesenswert?

@  Andreax (Gast)

>ich beschäftige mich seit einiger Zeit mit uCs

Drei Wochen? Gibts schon ne AVR App?

> und ich weis noch dass,
>als ich Anfänger war, ich über jede Hilfe froh war. Deshalb will ich
>auch mal was zurückgeben.

Klingt eher nach übergeben.

> Nach und nach werde ich das Tutorial
>erweitern. Das Tutorial ist theoretisch und praktisch aufgebaut also
>kann bestimmt jeder was mit anfangen.

Oder auch nicht.

>Erst mal die Grundlagen

>Logikpegel
>Wenn der Pegel 5V ist bedeutet das High oder 1

Was ist mit 3,3V Betrieb?

>Wenn der Pegel 0V ist, also keine Spannung angeschlossen, bedeutet das
>Low oder 0

Falsch. Wenn an einem Eingang nichts angeschlossen ist, dann ist er 
offen und genau das ist bei CMOS-Ics alles andere als gut.

>Es gibt auch 3.3V Logik, dann ist 3.3V High

Aha. Und bei 2,5V?

>Taktfrequenz
>Mit dem Quarz an Xtal 1,2 bringt man quasi den uC zum schwingen. Ohne
>Takt leistet der uC nichts.

so wie du

>Ports
>Jeder Port hat 8 Pins. Die können Eingänge oder Ausgänge sein. Jeder Pin
>kann 20mA liefern, also könnte man zB 8 normale LED betreiben, Bei 4
>Ports sind das bis zu 32 LED.

Und damit meistens der Controller mit 32x20mA=640mA hoffungslos 
überfahren.

>Mit DDR und dem Portbuchstaben kann man die Richtung der Ports
>festlegen.

DDR? Dort hab ich mal gelebt!

>Beispiel DDRA=145;

Die Autobahnnummer gibt es nicht ;-)

>Die Pins werden binär geschaltet.

Was umso logischer ist, wenn man vorher ne Dezimalzahl hinschreibt.

> D h 145 wird intern nach binär
>umgewandelt. 145 entschlüsselt ist 10010001. 1 bedeutet Ausgang und  0
>bedeutet Eingang. Also Hat Port d jetzt drei Ausgänge.

>Das umwandeln kan man selbst machen oder man benutzt ein Tool wie
>http://acc6.its.brooklyn.cuny.edu/~gurwitz/core5/n...

>Beispiel: DDRB=255;
>    PORTB=127;

>Nun ein einfaches Beispiel um mit einem Taster an Port B Pin 1 eine LED
>an Port a Pin a anzusteuern

Soso, einfach.

>Achtung: auch hier ist es ein typischer Anfängerfehler in der if Klammer
>= statt == zu benutzen.


>Ende der ersten Lektion

würg
Setzen, sechs!

>Viel Spass und bis bald

Ist das eine Drohung?

MfG
Falk

P S Ein Artikel im Wiki un noch dreimal mehr ein TUTORIAL schüttel 
niemand einfach mal so in 5 Minuten aus dem Ärmel. Nichtmal die 
Vollprofis. Aber die App-Generation hat ja auch nicht mehr die Ruhe, 
sich mal wenigsten EINEN Tag hinzusetzen und mal bissel nachzudenken, da 
wird einfach nur schnell mal was ausgekotzt und als Kunst verkauft. 
Jaja.

von MWS (Gast)


Lesenswert?

Alex schrieb:
> darfst du auch gerne schreiben, wie es richtig ist.

Hatte schon mein Vorredner gemacht:

Chris schrieb:
> Der µC muss den Wert nicht "umwandeln". Das erledigt schon der Compiler.

Alex schrieb:
> Sonst ist dein Beitrag nicht viel besser.

Doch, das ist er auf jeden Fall. Allein dadurch dass darin kein Unsinn 
verzapft wird.

Und das hat hier nichts mit Zurückgeben zu tun, denn ein Tutorial von 
Nichtwissenden für Nichtwissende ist allein dazu geeignet Nichtwissen zu 
vermitteln.

von Thomas E. (thomase)


Lesenswert?

MisterT schrieb:
> Der uC kann den Wert, da er ja binär ist, direkt in das Register DDR
> schreiben und spart sich 2 Takte, die er normal zum Umwandeln Dezimal
> <=> Binär bräuchte.
> Hoffe beigetragen zu haben!
Gott bewahre!

Geh' mit Andreax (Gast) einen trinken und sülzt euch gegenseitig voll, 
aber verschont den Rest dieser Welt mit euren Weisheiten.

Mods, wo bleibt das Schloss?

mfg.

von Andreax (Gast)


Lesenswert?

Wenn man sich nur auf negatives konzentriert kann man alles schlecht 
aussehen lassen. Na schön dann hab ich halt den einen oder anderen 
Fehler, aber auch viel Wissen kann vermittelt werden. Sucht doch mal in 
euerm Tutorial nach Fehlern wer sucht der findet.

von Cyblord -. (cyblord)


Lesenswert?

Andreax schrieb:
> Wenn man sich nur auf negatives konzentriert kann man alles schlecht
> aussehen lassen.
Es IST schlecht.

> Sucht doch mal in
> euerm Tutorial nach Fehlern wer sucht der findet.
Oho jetzt gibts schon "euer" und "mein" Tutorial. Sehr gute Einstellung 
in einer Community.
Du weißt dass das Tutorial hier ein Wiki ist und wenn du einen Fehler 
findest darfst du ihn gerne korrigieren. Oder wenn du meinst, einige 
Dinge wären nicht anfängergerecht und könnten besser dargestellt werden.
Damit würdest du mehr helfen als hier total falsche Dinge zu verbreiten. 
Aber wenn du da reinschreibst dass der Controller Dezimalzahlen erstmal 
zu Binärzahlen umwandeln muss dann wirst du gesteinigt.

gruß cyblord

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Andreax schrieb:

> DDRA=10010001; Quelle Hunt Worker

Schon falsch bzw. mit Sicherheit nicht das, was der Autor bezweckt: die 
Zahl ist eine Dezimalzahl; nur dadurch, daß sie nur 0 und 1 als Ziffern 
hat, wird die Darstellung nicht zur Binärdarstellung.

Für diese Zahl sind die 8 niederwertigsten Ziffern in Binär- und 
Dezimaldarstellung zwar identisch, was aber auch nicht hilft.

von Andreax (Gast)


Lesenswert?

Es geht kurz weiter. Denn so wie ich das sehe hilft das Tutorial viel 
mehr als es schadet. Und es gibt bestimmt auch Leute die wollen das ich 
weitermache. Nur so wie hier welche angreifen trauen sie sich nicht. 
Kann gut sein.

Helligkeit der LED ändern

Wenn man bei der Gitarre die tiefe Saite zupt schwingt die Saite langsam 
weit hin und her. Wenn man die kleinset Saite zupft schwingst sie 
schnell aber auch eng. Das kann man beim Avr benutzen um die Spannung zu 
ändern.

Beispiel: mit der höchsten Frequenz LED ansteuern.

DDRA=255;
while (1)
{
PORTA=0;
PORTA=255;
}

von Cyblord -. (cyblord)


Lesenswert?

Ich glaube du willst uns verarschen.

von MWS (Gast)


Lesenswert?

Andreax schrieb:
> Und es gibt bestimmt auch Leute die wollen das ich weitermache.

Nein, auf den Schmarrn von Dir wartet kein Mensch.

Andreax schrieb:
> Das kann man beim Avr benutzen um die Spannung zu
> ändern.

Die Spannung ändert sich nicht.

Langsam glaub' ich's nicht mehr, dass man so ein Vollpfosten sein kann, 
ich denk Du willst einfach nur ein wenig provozieren.

von ... (Gast)


Lesenswert?

Also ich find's toll. Endlich mal was mit Unterhaltungswert. Und das 
sogar ganz ohne Zuckerle!

von Hubert S. (Gast)


Lesenswert?

Andreax schrieb:
> Und es gibt bestimmt auch Leute die wollen das ich
> weitermache.

Troll-Fetischisten hier?

von spess53 (Gast)


Lesenswert?

HI

>Und es gibt bestimmt auch Leute die wollen das ich
>weitermache.

Wzbw (Was zu bezweifeln wäre).

>Beispiel: mit der höchsten Frequenz LED ansteuern.

>DDRA=255;
>while (1)
>{
>PORTA=0;
>PORTA=255;
>}

Schon wieder diese unmöglichen Dezimalzahlen.

Außerdem geht es bei vielen AVRs noch schneller.

MfG Spess

von Karol B. (johnpatcher)


Lesenswert?

Nichts für ungut "Andreax". Ich halte es für äußerst unprofessionell, 
dass du hier von so vielen Seiten angegriffen wirst (zum Teil sogar 
persönlich). Ich weiß auch nicht warum eine ganze Generation "App" dafür 
gerade stehen muss.

Aber unabhängig vom Inhalt deines Tutorials, welcher in der Tat sehr 
bescheiden ist, handelt es sich hier einfach um die falsche Plattform 
dafür. Du glaubst doch nicht ernsthaft, dass sich jemand durch ein 
Thread wühlt, welcher vor "Kritik" nur so wimmelt, um wieder ein paar 
Zeilen, welche von dir stammen und zum eigentlichen Tutorial gehören, zu 
finden.

Daher schlage ich dir Folgendes vor: Formuliere das Ganze lokal aus - 
komplett. Damit hast wenigstens du einen Überblick über den Inhalt des 
Tutorials. Bei deinem aktuellen Schreibstil und Wissensstand solltest du 
dann am besten sehr viele Leute drüber schauen lassen. Anschließend kann 
man sich dann überlegen wie und wo man das am Besten veröffentlicht.

Deine Energie und Motivation sind sicherlich löblich, aber man sollte 
das dann auch dahingehend fokussieren, dass für die Allgemeinheit ein 
Mehrwert entsteht.

So jedenfalls hat das einfach keinen Sinn - weder in dieser Form noch 
mit diesem Inhalt.

von Andreax (Gast)


Lesenswert?

cyblord ---- schrieb:
> Andreax schrieb:
>> Wenn man sich nur auf negatives konzentriert kann man alles schlecht
>> aussehen lassen.
> Es IST schlecht.
>
>> Sucht doch mal in
>> euerm Tutorial nach Fehlern wer sucht der findet.
> Oho jetzt gibts schon "euer" und "mein" Tutorial. Sehr gute Einstellung
> in einer Community.

Community, das ich nicht lache.

Ich hab einen Fehler gefunden den niemand bemerkt hat oder vielleicht 
weis niemand Bescheid


> Andreax schrieb:
while(1)
{
int a=0;
a=PINB;
if( PINB==1) PORTA=1;
}

Man darf die Definition int a=0 nicht in den while Bereich reinschreiben 
weil sie dort ständig wiederholt wird. Das darf man nicht

So ist es richtig

int a=0;
while(1)
{
a=PINB;
if( PINB==1) PORTA=1;
}

Ich würde mich freuen wenn ich einigen hier geholfen habe. Machts gut

von Cyblord -. (cyblord)


Lesenswert?

Andreax schrieb:
> Man darf die Definition int a=0 nicht in den while Bereich reinschreiben
> weil sie dort ständig wiederholt wird. Das darf man nicht

Du bist ja nen ganz Harter, machst dich über deine eigene Fehler lustig. 
Natürlich sieht das nicht gut aus, daher auch meine Aussage dass du 
grausigen Code produzierst. Aber man darf und es geht. Warum kannst du 
ja mal rausfinden. Alleine. Für dich.

gruß cyblord

von Pappnase (Gast)


Lesenswert?

hmmm... 'nen Troll!!!

von MWS (Gast)


Lesenswert?

Karol Babioch schrieb:
> Ich weiß auch nicht warum eine ganze Generation "App" dafür
> gerade stehen muss.

Weil "Wir denken nicht mehr, wir googeln. Und das ist auch gut so."

Das Problem ist dies, dass vielleicht Mama ein Lob ausspricht, wenn der 
Kleine alleine auf's Töpfchen geht oder ein Bäuerchen macht, nur wenn 
sich jemand tatsächlich mit dem Anspruch "AVR Tutorial" vorwagt und dann 
so einen erbärmlichen Blödsinn schreibt, gibt's halt nicht mehr Mama's 
wohlwollende Reaktion. Und das ist auch gut so.

> Ich halte es für äußerst unprofessionell,

Das hat nichts mit unprofessionell zu tun, eher mit dem Schutz von 
Anfängern vor solchen geistigen Blähungen.

von BooG (Gast)


Lesenswert?

Andreax schrieb:
> D h 145 wird intern nach binär
> umgewandelt.

Bitte mach' mich glücklich, und teile Dein Wissen mit mir, wieviele 
Takte ein AVR dafür benötigt. Ist diese conversion time fix, 
Werte-abhängig, oder gar nicht-deterministisch? Bislang 
bedauernswerterweise ergebnisoffen suche und forsche ich danach bereits 
seit Jahren.

Danke!

von Karl H. (kbuchegg)


Lesenswert?

Andreax schrieb:

> Man darf die Definition int a=0 nicht in den while Bereich reinschreiben

Doch darf man. Und bei deinem Programm macht es noch nicht einmal einen 
Unterschied.

Aber:
Andreax, dein Versuch ehrt dich. Aber die Situation ist leider die, dass 
dein Tutorial in der Form nix taugt. Das ist nicht böse gemeint, das ist 
einfach nur eine neutrale, objektive Sichtweise. Ein Tutorial zu 
schreiben ist nicht einfach. Auf der einen Seite muss man die 
Information vermitteln, die wichtig ist und auf der anderen Seite darf 
man den Leser auch nicht überfordern.
Bei deinem Ansatz überforderst du niemandan. So gesehen wäre das schon 
ok. Aber: Du vermittelst noch nicht einmal ansatzweise die Information 
die tatsächlich wichtig ist, ohne die es nicht geht. Und wenn ich mir 
deine Antworten so ansehe, dann liegt das noch nicht einmal daran, dass 
du sie absichtlich weggelassen hast. Der springende Punkt ist: Du weißt 
sie selber nicht.
Und das sind nun mal keine guten Voraussetzungen, um ein Tutorial zu 
schreiben. Du schadest damit anderen mehr als du ihnen hilfst.

(Und persönlich würde ich dir mal ein paar Stunden nachdenken über 
Zahlensysteme naheliegen. Die Thematik ist an und für sich nicht schwer, 
nur hattest du vorher noch nie damit zu tun. Und es gibt dabei viel zu 
lernen)

von Pappnase (Gast)


Lesenswert?

Falls die ständige Neuinitialisierung stören sollte, schreibe doch 
einfach ein 'static' vor Deinen Ausdruck, und kläre uns auf, was sich 
damit geändert haben könnte. Das wäre doch mal 'nen Tutorial. ;)

von Hubert S. (Gast)


Lesenswert?

Pappnase schrieb:
> 'nen Troll
> 'nen Tutorial

'nen Deutschkurs!

von Cyblord -. (cyblord)


Lesenswert?

Hubert S. schrieb:
> Pappnase schrieb:
>> 'nen Troll
>> 'nen Tutorial
>
> 'nen Deutschkurs!

'nen Oberlährer

von Andreax (Gast)


Lesenswert?

Hunt Worker schrieb:
> Andreax schrieb:
>> Beispiel DDRA=145;
>> Die Pins werden binär geschaltet. D h 145 wird intern nach binär
>> umgewandelt. 145 entschlüsselt ist 10010001. 1 bedeutet Ausgang und  0
>> bedeutet Eingang. Also Hat Port d jetzt drei Ausgänge.
>
> schreib das doch direkt in binärschreibweise:
>
> DDRA=10010001;
>

Hier hab ich jetzt aber einen Fehler entdeckt. Richtig heisst es 
0b10010001.

von Pappnase (Gast)


Lesenswert?


von Andreax (Gast)


Lesenswert?

Das b steht für binär

von Hubert S. (Gast)


Lesenswert?

Pappnase schrieb:
> @Hubert S. mache Dir um mir keine Sorgen, Deutsch beherrsche ich
> treffsicher

Tust du nicht!

Das heißt "ein Troll" oder abgekürzt "'n Troll" oder ersatzweise "n 
Troll". Niemals aber "'nen Troll" - auch wenn die Generation App die 
Benutzung von "'nen" geil findet. Gleiches gilt für das Tutorial.

Und jetzt ab ins Bett. Morgen ist wieder Schule. Gut aufpassen!

von Andreax (Gast)


Lesenswert?

Schreiben in Register

Zum Schreiben kann man Register einfach wie eine Variable setzen.

Beispiel:

#include <avr/io.h>

int main()
{
    /* Setzt das Richtungsregister des Ports A auf 0xff
       (alle Pins als Ausgang, vgl. Abschnitt Zugriff auf Ports): */
    DDRA = 0xff;

    /* Setzt PortA auf 0x03, Bit 0 und 1 "high", restliche "low": */
    PORTA = 0x03;

    // Setzen der Bits 0,1,2,3 und 4
    // Binär 00011111 = Hexadezimal 1F
    DDRB = 0x1F;    /* direkte Zuweisung - unübersichtlich */

    /* Ausführliche Schreibweise: identische Funktionalität, mehr 
Tipparbeit
       aber übersichtlicher und selbsterklärend: */
    DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << 
DDB4);

    while (1);
}

Die ausführliche Schreibweise sollte bevorzugt verwendet werden, da 
dadurch die Zuweisungen selbsterklärend sind und somit der Code leichter 
nachvollzogen werden kann. Atmel verwendet sie auch bei Beispielen in 
Datenblätten und in den allermeisten Quellcodes zu Application-Notes. 
Mehr zu der Schreibweise mit "|" und "<<" findet man unter 
Bitmanipulation.

Der gcc C-Compiler unterstützt ab Version 4.3.0 Konstanten im 
Binärformat, z. B. DDRB = 0b00011111. Diese Schreibweise ist jedoch nur 
in GNU-C verfügbar und nicht in ISO-C definiert. Man sollte sie daher 
nicht verwenden, wenn Code mit anderen ausgetauscht oder mit anderen 
Compilern bzw. älteren Versionen des gcc genutzt werden soll.

von Hubi (Gast)


Lesenswert?

Junge junge.
Na das nenn ich mal beratungsresistent.

von Andreax (Gast)


Lesenswert?

Es geht wieder weiter im Tutorial

Warten auf einen bestimmten Zustand

Es gibt in der Bibliothek avr-libc Funktionen, die warten, bis ein 
bestimmter Zustand eines Bits erreicht ist. Es ist allerdings 
normalerweise eine eher unschöne Programmiertechnik, da in diesen 
Funktionen "blockierend" gewartet wird. Der Programmablauf bleibt also 
an dieser Stelle stehen, bis das maskierte Ereignis erfolgt ist. Setzt 
man den Watchdog ein, muss man darauf achten, dass dieser auch noch 
getriggert wird (Zurücksetzen des Watchdogtimers).

Die Funktion loop_until_bit_is_set wartet in einer Schleife, bis das 
definierte Bit gesetzt ist. Wenn das Bit beim Aufruf der Funktion 
bereits gesetzt ist, wird die Funktion sofort wieder verlassen. Das 
niederwertigste Bit hat die Bitnummer 0.

#include <avr/io.h>
...

/* Warten bis Bit Nr. 2 (das dritte Bit) in Register PINA gesetzt (1) 
ist */

#define WARTEPIN PINA
#define WARTEBIT PA2

// mit der avr-libc Funktion:
loop_until_bit_is_set(WARTEPIN, WARTEBIT);

// dito in "C-Standard":
// Durchlaufe die (leere) Schleife solange das WARTEBIT in Register 
WARTEPIN
// nicht ungleich 0 (also 0) ist.
while ( !(WARTEPIN & (1 << WARTEBIT)) ) {}
...


Die Funktion loop_until_bit_is_clear wartet in einer Schleife, bis das 
definierte Bit gelöscht ist. Wenn das Bit beim Aufruf der Funktion 
bereits gelöscht ist, wird die Funktion sofort wieder verlassen.

#include <avr/io.h>
...

/* Warten bis Bit Nr. 4 (das fuenfte Bit) in Register PINB geloescht (0) 
ist */
#define WARTEPIN PINB
#define WARTEBIT PB4

// avr-libc-Funktion:
loop_until_bit_is_clear(WARTEPIN, WARTEBIT);

// dito in "C-Standard":
// Durchlaufe die (leere) Schleife solange das WARTEBIT in Register 
WARTEPIN
// gesetzt (1) ist
while ( WARTEPIN & (1<<WARTEBIT) ) {}
...

Universeller und auch auf andere Plattformen besser übertragbar ist die 
Verwendung von C-Standardoperationen.

von Martin (Gast)


Lesenswert?

ich glaube das Problem an halbgaren Tutorials ist, und ich vermute
dass es das ist was die meisten schlimm finden, dass sie vom Netz
nicht vergessen werden und geistern noch über Jahre.

als ich angefangen habe, habe ich mir ein Buch besorgt. Wenn ich
heute in so ein Buch reinschaue, denke ich oft, dass die Autoren
sich vergeblich die Mühe machen. Am allerbesten ist es sich auf
ein "device" einzulassen und das Datenblatt dazu anzuschauen.
Wenn sein muss - ganze Woche lang, wenn man Zeit hat, Paar Stunden
am Tag. Immer häppchenweise Peripherie austesten. Bringt mehr als
jedes Buch und Tutorial sowieso.

Ich hatte den grossen Vorteil, dass ich C, C++ und einige mehr
für PC Plattform gut beherrscht habe. Jemand der beides gleichzeitig
lernt, kämpft an zwei Fronten.

Und zuletzt: Tutorial in Beitragsform ist denkbar ungeeignet. Man kann
nicht nachträglich editieren. Besser ein Nischenthema wählen und Artikel
schreiben ;)

von Pappnase (Gast)


Lesenswert?

>> Und jetzt ab ins Bett. Morgen ist wieder Schule. Gut aufpassen!
Mache ich! Doof nur, morgen und sonst nie mehr werde ich wohl 'ne 
(bemerkt?) Schule wiedersehen, Herr Oberlehrer. Trotzdem Danke für die 
gefundenen Rechtschreibfehler. Darfst sie auch behalten. (ehrlich)

von Karl H. (kbuchegg)


Lesenswert?

Andreax, ein Vorschlag.

Installier dir irgendwo ein WIKI und schreib dort dein Tutorial.

Das was du hier machst ist nämlich obersinnlos. Spätestens morgen abend 
ist dein Beitrag schon auf die 2. Seite gerutscht und nächste Woche ist 
der Beitrag ganz weit hinten. Den findet kein Mensch mehr.

Mach irgendwo ein WIKI auf, fang dein Tutorial an zu schreiben und wenn 
du denkst, du hättest eine kritische Masse erreicht, dann gib Bescheid, 
dann sehen wir uns das an und sagen dir was du besser machen kannst.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.