Hallo Ich versuch mich gerade an meinem ersten Programm für AVRs bzw. möchte ein bestehendes PIC Programm umschreiben. Kann mir vielleicht jemand erklären, wie folgende 2 Zeilen auf AVR programmiert werden: #define LED LATBbits.LATB5 #define SCHALTER PORTBbits.RB2 danke Anita
Genauso. Das ist ja nicht Programmiert, sondern nur definiert. Interessanter ist der Teil des Codes, indem dieses benützt ist..
Vielleicht mal im Datenblatt des entsprechenden Chips nachlesen? IDR. werden die Register in den Header Dateien exakt so genannt. Müsste aber so inder Art heissen, ohne jemals ein PIC Datenblatt gesehen zu haben: PORTBDIR |= (1 << 5) // direction pin 5 output PORTBDIR &= ~(1 << 2) // pin 2 as input Wenn noch ein Pullup benötigt wird muss der evtl. auch noch in einem weiteren Register geschaltet werden.
Anita schrieb: > Ich versuch mich gerade an meinem ersten Programm für AVRs bzw. möchte > ein bestehendes PIC Programm umschreiben. Kann mir vielleicht jemand > erklären, wie folgende 2 Zeilen auf AVR programmiert werden: Das exakte Äquivalent dazu ist Handarbeit, da es für AVRs meist keine fertigen Bitfelder für Portzugriff gibt, jedenfalls nicht von Atmel. Was man ändern kann, aber das darf man dann eben selber machen. Die bei AVRs übliche Methode ist im Tutorial beschrieben: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports Dran denken, dass die Richtungssteuerung bei PICs grad andersrum läuft wie überall sonst.
bei den PICs konnte ich Pins einfach so wie oben definieren und konnte dann im Programm z.B. einfach die Led einschalten mittels: LED=1; oder über den Schalter steuern: if (SCHALTER==1){ LED=1; }else{ LED=0; } hab im AVR Studio verschiedens probiert, z.B.: #define LED PIND5 funktioniert hat aber bislang nichts...
Lies das erwähnte Tutorial. Steht alles drin. Im Blindflug gehts mit Sicherheit nicht.
probiers mal so:
1 | typedef struct |
2 | {
|
3 | volatile bool B0: 1; |
4 | volatile bool B1: 1; |
5 | volatile bool B2: 1; |
6 | volatile bool B3: 1; |
7 | volatile bool B4: 1; |
8 | volatile bool B5: 1; |
9 | volatile bool B6: 1; |
10 | volatile bool B7: 1; |
11 | } Bits; |
12 | |
13 | |
14 | #define LED (*(Bits *)(&PORTD)).B5
|
Gruß Anja
Anja schrieb: > probiers mal so: hab ich grad getesten (danke schon mal) wenn "LED" nach der Definintion im Hauptprogramm aufgerufen wird, bekomme ich beim Kompilieren folgenden Fehler: 'Bits' has no member named 'B5'
Anita schrieb: > 'Bits' has no member named 'B5' Hast Du den Header vom Prozessor eingebunden? #include <avr/io.h> /* Prozessorpins */ Gruß Anja
AVR-GCC Tutorial durcharbeiten. Ganz. Dann weißt du auch, wie man auf einem AVR Pins anspricht, und noch vieles mehr, z.B. warum man nicht einfach im Blindflug Registernamen ersetzen kann, um ein Programm auf eine andere Plattform zu portieren.
Die Definition einzelner Pins geht beim AVR-GCC etwas anders: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=67368&start=all Peter
Viele Wege führen nach Rom: so gehts auch: die compiler-Fehlermeldung liegt am im Gnu-C standardmäßig nicht vorhandenen "bool"
1 | #include <avr/io.h> /* Prozessorpins */ |
2 | #include <inttypes.h> |
3 | |
4 | typedef uint8_t bool; /* oder auch: typedef unsigned char bool; */ |
5 | typedef struct |
6 | {
|
7 | volatile bool B0: 1; |
8 | volatile bool B1: 1; |
9 | volatile bool B2: 1; |
10 | volatile bool B3: 1; |
11 | volatile bool B4: 1; |
12 | volatile bool B5: 1; |
13 | volatile bool B6: 1; |
14 | volatile bool B7: 1; |
15 | } Bits; |
16 | |
17 | |
18 | #define LED (*(Bits *)(&PORTD)).B5
|
19 | #define SCHALTER (*(Bits *)(&PINB)).B0
|
20 | |
21 | int main() |
22 | {
|
23 | DDRB = 0x00; /* input */ |
24 | PORTB = 0xFF; /* pull-up */ |
25 | |
26 | DDRD = 0xFF; /* output */ |
27 | PORTD = 0x00; /* low */ |
28 | |
29 | LED = 1; |
30 | |
31 | if (SCHALTER==1) |
32 | {
|
33 | LED=1; |
34 | }
|
35 | else
|
36 | {
|
37 | LED=0; |
38 | }
|
39 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.