Hallo alle miteinander,
ich habe ein kleines Problem bei der Programmierung eines PIC32.
Im Rahmen einer Laborvorbereitung soll ich nun einige kleine Programme
schreiben, was mir jedoch etwas schwer fällt, da ich bis jetzt nur mit
ATMEGA zu tun hatte und C auch nicht gerade meine stärke ist.
Es sind 7 Aufgaben wobei ich bei 3 nicht weiß wie ich anfangen soll
geschweige denn wie sie zu lösen sind. Unterlagen aus der Vorlesung sind
leider extrem dünn und mit dem Datenblatt komm ich auch nicht gerade
sehr weit.
Zum einen soll ein Zeichenprogramm geschrieben werden das eine Linie
zeichnet die durch den Navigationsschalter bestimmt wird. Mit SELECT
soll man das Display wieder löschen
Hier würde ich mich freuen wenn mit jemand beim Ansatz helfen könnte das
ich vollkommen überfordert bin
Bei der nächsten Aufgabe geht es um ein Codeschloss das mit 8 richtigen
Betätigungen des Navigationsschalters freigeschlatet werden kann.
Ich dachte hier könnte ich eine Ausgabe auf dem Display schalten mit
"Code eingeben", dann wollte ich eine IF-Anweisung schreiben. In der
IF-Anweisung frage ich dann ob die passende Richtung gewählt wurde, fals
nicht kommt die Ausgabe "CODE falsch" und es beginnt von vorne. Ein
Delay von 1 Sekunde ist als Wartezeit auf dei nächste eingabe gedacht.
Leider wären das dann 8 geschachtelte IF-Anweisungen was die
überischtlichkeit nicht gerade vereinfacht und ich weiß noch nicht wie
was ich bei ELSE eingeben muss damit die Funktion abbricht. Ebenso fehlt
mir der Ansatz wie ich es schaffe das man wärend der 1 Sekunde eine
Eingabe machen kann, da man ja in einem Delay einfach nur wartet, oder
funktioniert das wenn man ein Delay eingibt das der Controller dann
einen Befehl annimmt? Hatte so einen Fall noch nicht.
Würde mich hier auch über eine Meinung freuen oder einen Vorschlag wie
man es übersichtlicher gestallten kann.
Bei der von mir hier letzten Aufgabe gehts um einen Reaktionstest.
Hier wollte ich durch drücken der SELECT-Taste und nach einem kurzen
Delay das Display einfärben und dann einen Timer starten. Zum Stoppen
des Timers kann man eine beliebige Position am Navigationsschalter
wählen. Auf dem Display soll dann die benötigte Zeit ausgegeben werden.
Hier ist meine Frage ob ich Timer mit einer Betätigung des
Navigationsschalters einfach abschlaten kann, ohne das das Ergebnis im
Timer gelöscht wird? Hab da leider bis jetzt nichts im Datenblatt
gefunde.
Würde mich wirklich freuen wenn mir jemand auf diesem Gebiet etwas
aushelfen könnte.
Einen Verweis auf Literatur oder gute Internetseiten ist auch gern
gesehen (wenn möglich deutsch).
Gruß und Dank
Alexander
Alexander Becker schrieb:> soll ich nun einige kleine Programme> schreiben, was mir jedoch etwas schwer fällt, da ich bis jetzt nur mit> ATMEGA zu tun hatte und C auch nicht gerade meine stärke ist.
bei der genannten Aufgabenstellung sehe ich nix spezifisches für PIC
oder AVR. C sollte auf beiden Umgebungen gleich (gut) funktionieren, und
das bischen µC Modell-spezifische recht gut zu kapseln sein.
Themen wie "Interupt" versus delay gibt es ebenfalls auf allen
Architekturen, und die für und wider sind ebenfalls recht wenig u
Modell-spezifisch.
Versuch doch einfach dein Problem in deiner gewohnten PIC-Umgebung zu
formulieren, und dann passt du einfach den hardware-spezifischen Kram
an.
Wegstaben Verbuchsler schrieb:> in deiner gewohnten PIC-Umgebung
Korrektur: in deiner gewohnten AVR-Umgebung.
Wenn C nicht deine Stärke ist, dan nimm halt das, was du bisher auf
deinem AVR an Hochsprachen genommen hast. Bascom, Cobol, klingonisch
oder sonstwas. Algorithmen sind erst mal sprachen-unabhängig.
zeig doch mal die 4 bereits gelösten Aufgaben, dann kann man sich einen
Eindruck über deine Kenntnisse und Fähigkeiten machen ...
Also mit nicht meine Stärke mein ich nicht das ich gar nichts kann,
Grundkenntnise eben und die vorgeschriebene Programmiersprache ist C.
Die anderen Aufgaben waren bis jetzt nur eine Variablenausgabe für
int,float, etc. also etwas was ich mir sicher bin zu können :D
Muss mir da aber noch gedanken über die Ausgabe auf dem Display machen.
Ist aber bis auf diese Codezeile ja alles einfach nur reine C.
Weiter Aufgaben waren mit Timern, da ich aber oft mit Timern bei ATMEGA
gearbeitet hatte fiel mir das leichter, musste nur die Register aus dem
Datenblatt ablesen, Einstellungen waren ja in diesem bezug die gleichen.
Obwohl ich da auch noch eine Frage hätte, die ich eventuell noch später
stellen werde fals ich nicht selbst dahinter komme.
Wo ich momentan davorsitze ist das Codeschloss ich hab es mal mit den
geschachtelten IF-Anweisungen gemacht.
Leider hab ich noch 2 Ausgabe Möglichkeiten angegeben sprintf() und
oledtext().
Schauts dir einfach an und lass dich darüber aus, aber bitte nicht zu
grob sein ;)
1
Fill_RAM(0x00,0x00);
2
oledtext(RED,55,0,"Bitte Code eingeben!");
3
oledtext(RED,55,55,"1. Eingabe");
4
sprintf("Bitte Code eingeben!");
5
sprintf("1. Eingabe");
6
if(BLEFT){
7
Fill_RAM(0x00,0x00);
8
oledtext(RED,55,55,"2. Eingabe");
9
sprintf("2. Eingabe");
10
if(BLEFT){
11
Fill_RAM(0x00,0x00);
12
oledtext(RED,55,55,"3. Eingabe");
13
sprintf("3. Eingabe");
14
if(BLEFT){
15
Fill_RAM(0x00,0x00);
16
oledtext(RED,55,55,"4. Eingabe");
17
sprintf("4. Eingabe");
18
if(BLEFT){
19
Fill_RAM(0x00,0x00);
20
oledtext(RED,55,55,"5. Eingabe");
21
sprintf("5. Eingabe");
22
if(BLEFT){
23
Fill_RAM(0x00,0x00);
24
oledtext(RED,55,55,"6. Eingabe");
25
sprintf("6. Eingabe");
26
if(BLEFT){
27
Fill_RAM(0x00,0x00);
28
oledtext(RED,55,55,"7. Eingabe");
29
sprintf("7. Eingabe");
30
if(BLEFT){
31
Fill_RAM(0x00,0x00);
32
oledtext(RED,55,55,"8. Eingabe");
33
sprintf("8. Eingabe");
34
if(BLEFT){
35
oledtext(RED,55,20,"Code akzeptiert!");
36
oledtext(RED,0,55,"Mit Select Schloss wieder verriegeln.");
Ich hab noch ein bisschen dran rumgebastelt dank Internet und google.
Meine IF-Anweisungen sehen jetzt so aus:
if (CheckBut()==BSELECT){}
danach folgt dann ein:
RelBut();
Die Ausgabe mach ich nun nach dem RelBut mit:
oledtext(Farbe, x, y, "Text");
Ich hoffe man versteht was ich meine :D
Weiß aber leider nicht ob ich mit dem letzten "break" auch aus allem
rauskomm und wieder in die while(1) Routine reinkomm ?
So hab nun fast alle Aufgaben fertig.
Würde mich freuen wenn man mal darüber schauen könnte :)
Bei der Aufgabe mit dem ZeichenProgramm komm ich allerdings nicht
weiter. Ich weiß nicht mal wie ich das in C angehen soll finde da auch
leider nicht :(