Umstieg PIC -> AVR

Gast #2398969
Lesenswert?

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
#2399001
Lesenswert?

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.
#2399036
Lesenswert?

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.
Gast #2399050
Lesenswert?

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...
Gast #2399118
Lesenswert?

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
Gast #2399388
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren