Forum: Mikrocontroller und Digitale Elektronik Problem mit dem Verständnis eines programms?!


von HansWurst (Gast)


Lesenswert?

Nabend,

Ich habe einen PIC16F887 und möchte den integrierten AD Wandler 
benutzen.

So nun habe ich ein wenig im inet gestöbert und ein Quellcode gefunden.
Allerdings versteh ich nicht ganz was das Programm macht.

Code:
void main()
{
  unsigned char buf;
  /*CLK*/
  IRCF = 1;
  IRCF0 << 0;
  HTS   << 1;
  LTS   << 0;
  SCS   << 1;
  //---------
  buf = 0xff;
  TRISA0 << 1;
  TRISD  =  0;
  ANS0 << 1;

  ADCS1  << 0;
  ADCS0  << 1;
  VCFG1  << 0;
  VCFG0  << 0;
  CHS3   << 0;
  CHS2   << 0;
  CHS1   << 0;
  CHS0   << 0;
  ADFM   << 0;
  ADON   << 1;
  __delay_us(1);
  ADRESH = 0;
  PORTD = 0x11;
  while(1)
  {
    PORTD = 0x01;
    __delay_us(5);
    GODONE = 1;
    //__delay_us(5);
    while(GODONE == 1);
    buf = ADRESH;
    PORTD = buf;
  }
}

Das der PortD als Ausgang defeniert ist und PORTA.0 ist Eingang das weiß
ich schonmal^^.
So nun versteh ich nicht was der rest so alles bedeutet und macht /
verursacht?!

Ich bin noch relativ neu und tu mich noch ein wenig schwer damit!
Wäre nett wenn ihr mir helft :)

Mfg

von Bastel (Gast)


Lesenswert?


von Sam .. (sam1994)


Lesenswert?

1. da fehlt eine Menge (Interrupt).

2. Ich denke das Programm empfängt Daten und gibt sie auf PORTD aus.

3. 2 Threads sind wirklich nicht nötig.

von Karl H. (kbuchegg)


Lesenswert?

HansWurst schrieb:

> So nun habe ich ein wenig im inet gestöbert und ein Quellcode gefunden.

Wo hast du das her?

> Allerdings versteh ich nicht ganz was das Programm macht.

Im wesentlichen setzt es haufenweise irgendwelche Konfigurationsbits in 
irgendwelchen Registern. Was es damit aufsich hat, findest du im 
Datenblatt des Prozessors.

Allerdings:

>   ADCS1  << 0;
>   ADCS0  << 1;
>   VCFG1  << 0;
>   VCFG0  << 0;
>   CHS3   << 0;
>   CHS2   << 0;
>   CHS1   << 0;
....

war das ein C++ Programm? Denn in C sind das IMHO lauter 0-Operationen, 
d.h. sie bewirken gar nichts. Ich kann mir nicht vorstellen, wie man in 
C ADCS1 definieren könnte, dass ADCS1 << 0 irgendetwas sinnvolles macht. 
Ausser es handelt sich um eine Spezialsyntax dieses Compilers selbst 
verständlich. Aber nur mit Standard-C und Anwendung der dortigen Regeln 
sind das keine sinnvollen Operationen.

von HansWurst (Gast)


Lesenswert?

hier: 
http://www.fernando-heitor.de/index.php/forum/index.php/topic,4075.msg20804/

Kann man das auch iwie verständlicher schreiben? Weil is sehr doof, hab 
noch net so die Ahnung, hab aber auf Arbeit die Aufgabe bekommen und 
muss mich da rein arbeiten und andere ansätze hab ich noch nicht 
gefunden bzw. weiß ich nicht wie ich das sonst verwirklichen kann.

Mfg

von Bastel (Gast)


Lesenswert?

>andere ansätze hab ich noch nicht gefunden
RTFM (Datenblatt!!!)

von HansWurst (Gast)


Lesenswert?

soviel wie ich weiß steht da nur in asm und ich möchte das ja in c 
proggen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dieses "Programm" hat jemand geschrieben, der nicht programmieren kann.

Es ist funktionslos, weil jede "Anweisung", in der der Shift-Operator << 
auftaucht, funktionslos ist.

Vergiss das Beispiel, daran kann man nur lernen, wie man es nicht macht.

von Karl H. (kbuchegg)


Lesenswert?

HansWurst schrieb:
> soviel wie ich weiß steht da nur in asm und ich möchte das ja in c
> proggen.


Dann solltest du wenigstens soweit sein und den Rest des von dir 
verlinkten Threads lesen! Dort steht nämlich, dass die ganzen << Unsinn 
sind und wie sie zu ersetzen sind.

Zur Sache:
Das spielt keine Rolle.
Im Datenblatt steht zb, dass du das Bit XYZ (Name von mir erfunden) auf 
1 setzen musst, um beim ADC den Vorverstärker auf eine Verstärkung von 2 
einzustellen.
Ob du das dann in Assembler mit ein paar Anweisungen schreibst, die so 
im Datenblatt stehen, oder ob du das in C als

    XYZ = 1;

schreibst, ist von der Sache her egal. Den der entscheidende Punkt ist, 
dass XYZ auf 1 gesetzt werden muss, wenn du besagten Verstäker 
einschalten willst. Das Einschalten verursacht etwas und nicht wie man 
es dann in der jeweiligen Programmiersprache schreibt.

Und die Beschreibung dessen, was jedes einzelne Bit macht, die findest 
du im Datenblatt. Besser als dort kann dir das hier auch keiner 
beschreiben. Und vor allen Dingen nicht vollständiger.

von Bastel (Gast)


Lesenswert?

>soviel wie ich weiß steht da nur in asm und ich möchte das ja in c
>proggen.
Oh, meine Fresse!!! Im Datenblatt steht wie der ADC funktioniert, welche 
Bits in welchen Registern was machen und wann in welcher Reihenfolge 
gesetzt werden müssen, wo das Ergebnis steht usw. Wie man in C Bits in 
einem Register setzt usw. steht da natürlich nicht, das hat nichts mit 
dem PIC zu tun. Dafür gibts Tutorials. Im übrigen dürftest du nicht der 
erste sein der den ADC nutzen will, Google kann sicherlich auch da 
helfen.

Sacht mal, gibt es noch Leute die nicht für jede Kleinigkeit sofort 
das Forum zuspammen sondern mal selber suchen und nachdenken? (und ggf. 
vernünftig schreiben?)

von HansWurst (Gast)


Lesenswert?

okey das is doof mh dann muss ich wohl weiter suchen. Ich hae keine 
Ahnung wie das machen soll weil bin noch sehr neu und ja naja hab nen 
großes Projekt und das ist ein Teil davon. Naja ich hoffe ihr könnt mir 
ratschläge geben wie man das machen kann das es ansatzweise die funktion 
hat das man einen analogen Wert einlist und digital über erstmal LEDs 
ausgibt.

Gruss

von Sam .. (sam1994)


Lesenswert?

Nimm ein AVR, da stehts im Tut hier.

von Karl H. (kbuchegg)


Lesenswert?

HansWurst schrieb:
> okey das is doof mh dann muss ich wohl weiter suchen.

Nein.
Du musst lernen!
Und du musst das Datenblatt studieren!
Und du musst ein C Buch lesen und durcharbeiten!

(Sinnvollerweise fängst du mit dem C-Buch an um dir erst mal Grundlagen 
in C anzueignen)

> Ich hae keine
> Ahnung wie das machen soll

Ja das wissen wir schon

> weil bin noch sehr neu

Auch das wissen wir.
Aber das istz keine Entschuldigung dafür, dass du deine Hausaufgaben 
nicht machst.

> und ja naja hab nen
> großes Projekt und das ist ein Teil davon.

Na Prost Mahlzeit.
Mit dem was du bisher gezeigt hast, wäre es besser, auch für deinen 
Auftraggeber, wenn du das Projekt abgeben könntest. Denn das wird 
nichts. Und so wie du dich anstellst, wird es auch die nächsten 2 Monate 
nichts.

Programmieren ist nicht etwas, was man in 3 Tagen lernen kann.

von HansWurst (Gast)


Lesenswert?

@Bastel: Bleib mal ganz ruhig! Sy das ich nicht so all wissend bin wie 
du es bist! Ich bin ein Anfänger und ich belese mich schon die ganze 
Zeit. Weiß aber noch nicht wie ich das machen muss hab zwar befehele 
aber ka wie verkünpfen etc. dafür is nen Forum da um sich "Hilfe" zu 
suchen!

von Bastel (Gast)


Lesenswert?

Danke Karl heinz Buchegger, ich hätte es unfreundlicher formuliert.
Gute Nacht!

von Karl H. (kbuchegg)


Lesenswert?

HansWurst schrieb:
> @Bastel: Bleib mal ganz ruhig! Sy das ich nicht so all wissend bin wie
> du es bist! Ich bin ein Anfänger und ich belese mich schon die ganze
> Zeit. Weiß aber noch nicht wie ich das machen muss hab zwar befehele
> aber ka wie verkünpfen etc. dafür is nen Forum da um sich "Hilfe" zu
> suchen!

Ein Forum ist hauptsächlich dazu da (zumindest versteht sich dieses 
Forum hier so), um Details abzuklären. Ab und zu auch mal eine 
grundlegende Technik erklären.
Aber dazu muss ein Grundstock da sein!
Und den vermisst man bei dir schmerzlich. Da ist so gar nichts da, 
worauf man aufbauen könnte.

von holger (Gast)


Lesenswert?

>dafür is nen Forum da um sich "Hilfe" zu
>suchen!

Sicher, aber nicht von jetzt auf sofort ein
perfekter Programmierer zu werden. Das braucht seine Zeit.

von HansWurst (Gast)


Lesenswert?

Ja kommt ey was isn das fürn f*** Forum ey -.-

ich bearbeitet das C Programmier Buch und Datenblätter studiere ich 
auch.
Aber wenn ich nen Projekt bekomme und da noch nicht so bewachsen bin 
dann steht man numa vor ner riesen wand! Ich probiere ja shcon viel rum 
und versuche es ohne Hilfe hin zu bekommen, was bislang leider noch 
keine großen erfolge gebracht hat, außer das ich einige Befehle lerne 
und versuche diese speziell nach dem Projekt an zu reihen.

Aber hat ja kein zweck!

Wenn ich das alles wüsste bräucht ich nicht hier schreiben! Will ja nur 
denkanstöße bekommen und keine kompletten Progrgramme.

Das war das letzte mal das ich hier in das Forum schreibe weil ich hab 
es satt das man als Anfänger gleich runter gemacht wird, das man seine 
hausaufgaben nicht macht oder sonst was. Ich programmiere und lese die 
letzten tage seh viel um die befehele langsam drauf zu bekommen aber das 
macht aus mir nicht gleich nen Programmierer.

von Karl H. (kbuchegg)


Lesenswert?

HansWurst schrieb:

> Aber wenn ich nen Projekt bekomme und da noch nicht so bewachsen bin

Entschuldige.
Aber zu erkennen, dass

   ADCFG << 0;

so rein gar nichts macht, dazu muss man nicht bewachsen sein. Dazu muss 
man nur seine Hausaufgaben in der C Programmierung gemacht haben.


> Wenn ich das alles wüsste bräucht ich nicht hier schreiben! Will ja nur
> denkanstöße bekommen

Der Denkanstoss ist:
Du musst systematisch vorgehen. Vom Einfachen zum Schwierigeren. Du 
musst viel Üben. Von Anfang an. Mit den ganz einfachen Dingen. Du kannst 
eine LED zum Leuchten bringen? Gut. Dann mach Lauflichter bis zur 
Vergasung. Wie kriegst du es hin ein Muster umlaufen zu lassen, wie 
funktioniert das auf Bitebene. Schleifen, etc. das darf alles keine 
Probleme machen. Eine Bitsetzsyntax musst du ohne groß nachzudenken 
erkennen können wenn du sie siehst.

> Das war das letzte mal das ich hier in das Forum schreibe weil ich hab
> es satt das man als Anfänger gleich runter gemacht wird,

Du wirst nicht runtergemacht weil du Anfänger bist.
Du wirst runtergemacht, weil du offenbar in der Vorstellungswelt lebst, 
dass du nur zuhören musst um programmieren zu lernen. Wenn du von heute 
Nachmittag bis jetzt kein einziges mal auf den Gedanken gekommen bist, 
ins Datenblatt zu schauen und nachzulesen, was es über diese Wörter wie 
ADCS1, ADCS0 und wie sie noch alle heißen, zu berichten weißt, dann 
fehlt da einfach von deiner Seite etwas Eigeninitiative. Du magst bisher 
daran gewöhnt sein, dass dir immer jemand alles bis ins kleinste 
vorkaut, aber wenn du programmieren willst, dann ist es damit vorbei. 
Programmieren ist wie Radfahren lernen. Man muss es tun und nicht nur 
darüber lesen oder zusehen! Wenn man hinfällt, dann heißt es aufstehen 
und noch einmal, anders, probieren.

Das das alles am Anfang viel auf einmal ist, das wissen wir schon.
Das ist uns auch nicht anders ergangen als dir.
Und genau darum ist es so wichtig, dass die Grundlagen sitzen. Wenn du 
uns das Ursprungsprogramm so wie du es hast präsentierst, dann muss ich 
mich auf den Kopf greifen und mich fragen: Ja wo hat der denn seine 
C-Grundlagen gelernt. Und das hat erst mal gar nichts damit zu tun, was 
denn da alles eingestellt und eingeschaltet wird.

von Bastel (Gast)


Lesenswert?

OK, also doch.

> @Bastel: Bleib mal ganz ruhig! Sy das ich nicht so all wissend bin wie
> du es bist!
Ich bin überhaupt nicht "allwissend". Aber ich hab im Unterricht / 
Studium aufgepasst, hab für ein Projekt ein, zwei mal bis nachts um 2 
vor MPLAB und Co. gesessen, hab Datenblätter, Spezifikationen, 
Compilermanuals(!), Tutorials und so weiter gelesen (obwohl mein 
Englisch miserabel ist), hab gegoogelt, überlegt und probiert bis es 
funktioniert hat und ich es verstanden hatte. Nicht einfach wie andere 
Studenten Code von irgendwo kopiert und als meinen Eigenen ausgegeben.

Du hast keine Ahnung von Nichts, suchst dir das nächstbeste Forum (aha, 
Google kannst du also bedienen, ist ja schon mal etwas), schmiert 
lieblos eine Anfrage hin, natürlich im passenden Jargon (^^ eih alder 
voll kraßs ey wa?) wie es sich für einen coolen Jugendlichen gehört, 
verschweigst natürlich das du das eigentlich selber können müsstest und 
erwartest das dir jemand Quellcode + Doku frei Haus liefert, am besten 
bis gestern. Ne Freundchen, so läuft das nicht!

> Ich bin ein Anfänger und ich belese mich schon die ganze Zeit
Ich will es nicht eskalieren lassen, deshalb nutze ich diese 
Steilvorlage jetzt nicht (und ich habe Mühe mich zurückzuhalten!).

>dafür is nen Forum da um sich "Hilfe" zu suchen!
Wenn man sich mit den Grundlagen beschäftigt hat und diese 
beherrscht(!), die Datenblätter gelesen und verstanden sind, man u.U. 
einen Blick ins Handbuch vom Compiler geworfen hat, auf der 
Herstellerseite nach Application Notes und Ähnlichem gesucht hat, Google 
gefragt, über das Problem nachgedacht hat und diverse Möglichkeiten 
selbstständig ausprobiert hat, die Forensuche benutzt und ähnliche 
Postings gelesen hat, die darin enthaltenen Informationen umgesetzt hat, 
wenn es dann immer noch nicht klappt erstellt man ein neues Posting. 
Dabei ist man höfflich, schreibt vernünftig, gibt so viele Informationen 
wie möglich (µP, Compiler, was hat man schon probiert, was genau ist das 
Problem usw.), strukturiert diese vernünftig, hängt einen möglichst 
kurzen Quellcode an welcher das Problem erzeugt (Minimalbeispiel) und 
bittet freundlich um Hilfe. Was du hier machst habe ich oben 
beschrieben.

Rhaaa, warum schreib das überhaupt??? Reine Zeitverschwendung, eig. 
wollte ich ins Bett.

@Moderatoren
Verzeihung, irgendwann platzt auch mir der Kragen.

von HansWurst (Gast)


Lesenswert?

Ja ich stele vlt die Fragen falsch sodas es rüber kommt als will ich 
alles hier auf meinen tisch hingelegt bekommen ohne mir iwelche gedanken 
oder mühen zu machen. Das stimmt nicht. Ich bin derzeit in der 
Ausbildung und ich habe noch nie mit C Programmiert (ganz ganz kurz ins 
asm rein geschnuppert, was in mir das interesse geweckt hat) und 
studieren tu ich auch nicht das ich das dort gelehrt bekomme.
Ich habe mich entschieden das zu lernen und ich habe nix außer ein Buch 
und ein paar tuts ausm netz.
So jetz versuch ich mir alles iwie zusammen zu reihmen und zu verstehen 
was da alles geschrieben ist. Ich habe auch schon einige standart 
Befehle drauf. Ich habe auch schon LEDs zum leuchten gebracht, zum 
blinken, nen Lauflicht habe ich auch gemacht . Aber für mehr reicht es 
leider nicht! Ich habe dieses Projekt angenommen um mehr über C zu 
lernen.

Und das ich mir seit heute nachmittag noch nicht ins datenblatt geschaut 
habe was das alles so bedeutet, liegt daran das ich auf Arbeit auch noch 
andere dinge zu tun habe und danach auch noch training und erst am abend 
nach hause komme.

aber egal ich werde euch mit meinen Fragen in ruhe lassen und versuchen 
mir das selber bei zu bringen.

von Wolfgang B. (et-tutorials) Benutzerseite


Lesenswert?

@HansWurst

Vielleicht hilft Dir mein Video-Tutorial zum Thema 
"Mikrocontrollerprogrammierung in C".

Der ist zwar für absolute Anfänger gedacht, aber Du kannst ie ersten 
Folgen ja überspringen, wenn Du möchtest.
http://et-tutorials.de/mikrocontroller/

von Meister E. (edson)


Lesenswert?

Hallo HansWurst,

(sorry, aber den Nick hast Du dir selber gegeben)

HansWurst schrieb:
> aber egal ich werde euch mit meinen Fragen in ruhe lassen und versuchen
> mir das selber bei zu bringen.

sei mal nicht gleich beleidigt. Warum hast du eigentlich nicht in dem 
Forum gefragt, wo du den Quelltext kopiert hast? Ich weiss, es ist nicht 
so stark frequentiert wie dieses hier, aber wenn du dich schon dort 
bedienst wäre es sicher angebracht dort mal aufzukreuzen mit deinen 
Fragen. (erspart auch die immer wiederkehrenden Hinweise auf AVR, da wir 
ein spezielles PIC-Forum sind)

Grüße,
Edson

von HansWurst (Gast)


Lesenswert?

Hallo,

erstmal schönen dank Wolfgang Bengfort.
Ganz einfach aus dem Grund, weil ich mich nicht über all anmelden möchte 
und ich in diesem Forum hier eine gute chance gesehen habe das mir 
geholfen wird.

Mfg

von Meister E. (edson)


Lesenswert?

HansWurst schrieb:
> Ganz einfach aus dem Grund, weil ich mich nicht über all anmelden möchte
> und ich in diesem Forum hier eine gute chance gesehen habe das mir
> geholfen wird.

Weder hier im Mikrocontroller.net noch bei Fernando-Heitor.de besteht 
eine Anmeldepflicht. Aber du brauchst dich nicht zu rechtfertigen, 
wollte dich nur einladen auch bei uns mal reinzuschauen.

Grüße,
Edson

von HansWurst (Gast)


Lesenswert?

okey wusst ich nicht! Dachte das man sich dort auch anmelden muss 
Entschuldigung. Ja klar werde gern mal bei euch reinschauen:).

Mfg

von &uuml; (Gast)


Lesenswert?

Hinweis am Rande: Dies ist zwar ein Forum, ich bitte aber dennoch um 
korrekte Rechtschreibung! Bitte beachten Sie v.a. den Unterschied 
zwischen "dass" und "das". Personen, die sich nicht an die 
Rechtschreibung halten, disqualifizieren sich bereits selbst in gewisser 
Weise - denn ein guter Ingenieur hat auch auf seine Ausdrucksweisen zu 
achten.

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.