Forum: Mikrocontroller und Digitale Elektronik Hilfe bei kleinen Programmen für PIC32MX5xx


von Alexander B. (alexander_b86)


Lesenswert?

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

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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 ...

von Alexander B. (alexander_b86)


Lesenswert?

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." );
37
                                   sprintf("Code akzeptiert!");
38
                                   sprintf("Mit Select Schloss wieder verriegeln.");
39
                                   if (BSELECT){
40
                                       break;
41
                                   }
42
                               }
43
                           }
44
                       }
45
                   }
46
               }
47
               
48
           }
49
       }
50
   }

von Alexander B. (alexander_b86)


Lesenswert?

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 ?

von Alexander B. (alexander_b86)


Angehängte Dateien:

Lesenswert?

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 :(

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.