Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC Programmierung (18F2455)
Hallo,
Für ein Projekt in der Schule müssen wir einen PIC programmieren.
Jedoch kennen wir uns mit der PIC Programmierung kaum aus und so
funktioniert unser erstes Programm nicht. Vielleicht könnte einer von
euch das Programm ansehen und uns helfen es lauffähig zu bekommen.
Wir programmieren mit MPLAB 7.31 und dem C18 Compiler (MCC18).
Eventuell liegt der Fehler auch an Einstellungen die man im Programm
vornehmen muss.
Ich hoffe, ihr könnt uns helfen.</pre>
index= !(PORTBbits.RB4)*1 + !(PORTBbits.RB5)*2 + !(PORTCbits.RC0)*4 + !(PORTCbits.RC1)*8;
Könnte es sein das Du die Bits erst wichten und dann negieren solltest, statt umgekehrt.
index= !((PORTBbits.RB4)*1) + !((PORTBbits.RB5)*2) + !((PORTCbits.RC0)*4) + !((PORTCbits.RC1)*8);
Peter Dannegger
10.03.2006, 15:50
...und so funktioniert unser erstes Programm nicht.
Glaubst Du allen Ernstes, wenn Du keine Lust hast zu sagen, was nicht geht, daß ein anderer Lust hat, Deine Faulheit zu unterstützen ???
Träum weiter.
Ein kleines bischen Einsatz muß man schon zeigen.
Peter
das man das erst gewichten muss glaube ich nicht
und Peter:
ich zeige schon seit Wochen Einsatz
aber ich ahbe keine Ahnung übers PIC_Prgorammieren und kenne auch niemanden der mir das beibringen kann
das haben wir auch nicht gelernt in der Schule
wäre schon sehr nett wenn ihr mir helfen könntet
Peter Dannegger
10.03.2006, 22:01
wäre schon sehr nett wenn ihr mir helfen könntet
Würden wir gerne, bloß wir können nicht in Deinen Kopf schauen.
Was hast du denn schon alles probiert ?
Hast Du überhaupt schon einmal ein Programm zum laufen gebracht ?
Man muß klein anfangen, z.B. ne LED einschalten, ne Taste abfragen usw.
Gleich ein Programm fertig zu schreiben und dann erst testen, können nur absolute Profis und selbst die nicht immer.
Peter
habe auch kleine Testprogramme geschrieben (für einzelne Leds etc.) die haben aber auch noch nicht funktioniert
ich habe leider kein Wissen über PICs
deswegen frage ich ja
wenn ich es selbst können würde müsste ich ja net fragen
das Problem ist das es ziehmlich dringend ist
ihr müsst euch ja nur das Programm anschauen und sagen wo Fehler liegen könnten oder was fehlt
da ich keine Erfahrung mit PICs habe, bin ich selber leider noch nicht drauf gekommen warum es nicht geht
Peter Dannegger
11.03.2006, 11:05
habe auch kleine Testprogramme geschrieben (für einzelne Leds etc.) die haben aber auch noch nicht funktioniert
Na das ist ja schon mal ne sehr wichtige Aussage, die Du uns bisher leider vorenthalten hast.
Wenn noch nie was lief, dann mußt Du Dich eben erstmal mit den Grundlagen beschäftigen, z.B.:
http://www.sprut.de/electronic/pic/index.htm
Man kann keinen Berg mit nur einem Schritt besteigen.
Peter
Mir hilft da einfach, mich in Fremde einfache Routinen hineizudenken um zu verstehen was passiert. Leider kann ich Dir ein solches Beispiel nicht bieten, da ich um Pics noch immer einen großen Bogen gemacht habe, obwohl oder gerade weil ich mich da mal eingelesen hatte. Die AVR sind mir da lieber:) , sie ähneln meiner geliebten 6502:D . Und die beherrsche ich, während der Pic wahrscheinlich mich beherrschte, mir mindestens aber schlaflose Nächte bereiten dürfte.:(
im übrigen ist !(1*4) <> (!1)*4
!(1*4) = 0b11111011
(!1)*4 = 0b11111000
soviel zum negieren und wichten
Peter Dannegger
11.03.2006, 11:58
!(1*4) = 0b11111011
(!1)*4 = 0b11111000
Das ist vollkommen falsch !
Der ! Operator ist die logische Negation, d.h. er liefert 1 zurück, wenn der Ausdruck 0 ist, ansonsten 0:
!(1*4) = 0
(!1)*4 = 0
!(0*4) = 1
(!0)*4 = 4
Die bitweise Negation ist der ~ Operator:
~(1*4) = 0b11111011
(~1)*4 = 0b11111000
~(0*4) = 0b11111111
(~0)*4 = 0b11111100
Peter
oops peter,
Da hab ich wohl geschlafen.
Trotzdem mutmaße ich, er müßte bitweise negieren sonst macht seine Programmzeile keinen Sinn und da kommt es eben auf die Reihenfolge an, außerdem ist dann wohl auch bittweise undieren richtiger als addieren oder stehe ich jetzt vollkommen auf dem Schlauch. So jetzt hat Winníe auch wieder was zum lästern, ihch habe mich zwichen den beiden Negatoroperatoren verannt:confused: :(
Peter Dannegger
11.03.2006, 12:30
Trotzdem mutmaße ich, er müßte bitweise negieren sonst macht seine Programmzeile keinen Sinn und da kommt es eben auf die Reihenfolge an, außerdem ist dann wohl auch bittweise undieren richtiger als addieren oder stehe ich jetzt vollkommen auf dem Schlauch.
Ich kann Dich beruhigen, die Zeile ist richtig.
Ich gebe aber zu, sie ist nicht gerade einfach zu verstehen und bestimmt nicht einem Anfänger eingefallen.
Funktional entspricht sie etwa folgendem:
index = 0;
if( !(PORTBbits.RB4))
index += 1;
if( !(PORTBbits.RB5))
index += 2;
if( !(PORTCbits.RC0))
index += 4;
if( !(PORTCbits.RC1))
index += 8;
Und wenn man immer nur verschiedene Bits addiert, gibt es keinen Überlauf auf höhere Bits und somit ist + und | und auch ^ gleich.
& wäre aber falsch, damit würdest Du die Bits löschen und nicht setzen.
Verschiedene Bits zu undieren ergibt immer 0.
Peter
Ich kann Dich beruhigen, die Zeile ist richtig.
Ich gebe aber zu, sie ist nicht gerade einfach zu verstehen und bestimmt nicht einem Anfänger eingefallen.
Funktional entspricht sie etwa folgendem:
index = 0;
if( !(PORTBbits.RB4))
index += 1;
if( !(PORTBbits.RB5))
index += 2;
if( !(PORTCbits.RC0))
index += 4;
if( !(PORTCbits.RC1))
index += 8;
Und wenn man immer nur verschiedene Bits addiert, gibt es keinen Überlauf auf höhere Bits und somit ist + und | und auch ^ gleich.
& wäre aber falsch, damit würdest Du die Bits löschen und nicht setzen.
Verschiedene Bits zu undieren ergibt immer 0.
Peter
Ja ich meinte auch er wolle eine lowaktive Logik. Aber nach dem das geklärt ist, ist auch klar das er weiter unten eine Fehler hat, da er als mögliche Inhalte von index nur 1,2,3und4 prüft, er müßte aber wenn es eine positive Logik sein die bits 0,1,2,3 prüfen mit den Wichtungen 1,2,4 und 8
Habe ich das jetz richtig oder sollte ich heute lieber den Lötkolben benutzen als nen Programm zu schreiben? ;)
sorry ich penne
Der hat index ja noch als zeiger auf nen inaktives arry benutzt. Heute lese ichs kein Programm mehr das ich nicht selbst geschrieben habe.
index= !(PORTBbits.RB4)*1 + !(PORTBbits.RB5)*2 + !(PORTCbits.RC0)*4 + !(PORTCbits.RC1)*8;
damit wollen wir 4 Pins negieren und unterschiedlich wichten
und dadurch einen bestimmten Wert aus der Zuweisungstabelle bekommen
const int zu_tab[16]={0,1,0,2,0,0,0,3,0,0,0,0,0,0,0,4};
zusätzlich habe ich eine aktuelle Version des Programms eingefügt
danke für Hilfe
Hallo,
wir haben jetzt ein neues Problem. Und zwar passt zwar das Programm aber der PIC schaltet jedesmal wenn man mit der Hand in die Nähe der Schaltung kommt. Woran könnte das liegen bzw. was kann man dagegen machen?
mfg mf01
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.