Frage zu Pins UNO<->328P

  • Hallo Zusammen.

    Ich bin etwas Durcheinander.

    Seit einiger Zeit beschäftige ich mich nun mit einem Uno Board. Klappt auch alles prima.
    Jetzt hab ich ein kleines Projekt nachgebaut wo ein 328P direkt in der Schaltung sitzt.
    Nun bin ich ein wenig durcheinander.

    Wenn ich das von der Arduino IDE erzeugte HEX file via ISP in den 328p lade.
    Wie ist das mit der Bezeichnung der Pins ?

    In der Arduino IDE ist z.B. folgendes für eine LED einzuschalten:

    Code
    pinMode(A0, OUTPUT);
    digitalWrite(A0, HIGH);


    Setzt den Ananolgen Input 0 auf Dig Output und schaltet ihn auf High

    Der Uno Pin A0 sollte nach dem Pinmapping hier am 328p PIN23 (PC0) sein. Dort würde jetzt die LED angeschlossen.

    Nun verwirrt mich diese PIN Bezeichnung.
    Übersetzt die IDE das oder muß ich die Pin Nummern im Sketch anpassen wenn ich den Sketch direkt via ISP in einen 328P lade (ohne den Bootloader) anstatt in den Uno?

    Oder anders rum, wenn ich in der Arduino IDE ein Programm für einen 328P in einer Schaltung schreibe und dort am 328P am Pin 23 eine LED habe, muss ich A0 als PIN Nummer nutzen ?

    Helft mir mal bei dem Entwirren meines Schädels.
    Jedes mal wenn ich darüber Nachdenke komme ich zu einem anderen Schluß. *pff*

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (8. April 2016 um 13:05)

  • in der Arduino IDE nimmst du die Arduino Bezeichnungen A0 , im AVR Studio halt den Port C und PIN 0 (das kannst du auch im Arduino Port und Pin nehmen)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo Der_Imperator,

    schön, Dich mal wieder hier zu sehen ;) .

    Nach meinem Verständnis ist es so:
    - Du gibst in den Editor / IDE einen Quelltext ein
    - Dann wählst Du das Board aus, für der Quelltext in ein lauffähiges binär-codiertes Etwas gewandelt werden soll
    - Für jedes Board gelten globale Variablen (im Sinne: Welcher Pin wird angesprochen, wenn von A0 etc. die Rede ist)
    - Du nimmst die Pin-Bezeichnungen, die für das Ziel-Board gelten


    Somit musst Du Dich darum nicht kümmern, wie Pins an unterschiedlichen Boards adressiert werden.


    Beste Güße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (8. April 2016 um 13:10)


  • in der Arduino IDE nimmst du die Arduino Bezeichnungen A0 , im AVR Studio halt den Port C und PIN 0 (das kannst du auch im Arduino Port und Pin nehmen)

    Danke, du hast mein Wochenende gerettet :bravo2:

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • im Prinzip OK,

    da ich aber öfter zwischen den "Welten" wandel m1284p m328p m2560

    A0 ist immer A0 in der Arduino IDE aber in C auf dem AVR Studio auf unterschiedlichen Chips ist es besser den Code wenn möglich auf PORT und PIN zu machen

    für die ISR benutze ich sogar verschiedene Register weil es sonst klemmt, warum auch immer:

    Spoiler anzeigen


    #ifndef _PINS_H_
    #define _PINS_H_

    #if defined(__AVR_ATmega328P__)
    #define TIMSKx TIMSK1
    #define OCIExA OCIE1A
    #define TIMERx_COMPA_vect TIMER1_COMPA_vect // ATmega
    #define TCCRxA TCCR1A
    #define COMxA0 COM1A0
    #define OCRxA OCR1A
    #define TCCRxB TCCR1B
    #define WGMx2 WGM12
    #define CSx0 CS10

    #define LED_ARDUINO 5
    #define LED_ARDUINO_DDR DDRB
    #define LED_ARDUINO_PORT PORTB
    #define LED_ARDUINO_ON LED_ARDUINO_PORT|=(1<<LED_ARDUINO)
    #define LED_ARDUINO_OFF LED_ARDUINO_PORT&=~(1<<LED_ARDUINO)

    // arduino nano v3
    // DIGITAL
    // (Reset) PC6
    // D0 (Rx) PD0
    // D1 (Tx) PD1
    // D2 (Int0) PD2
    // D3 (Int1) PD3
    #define LCD_SCK 3
    // D4 (XCK/T0) PD4
    #define LCD_MOSI 4
    // D5 (T1) PD5
    #define LCD_DC 5
    // D6 (AIN0) PD6
    #define LCD_RST 6 // neu // #define LCD_RST 10 // alt
    // D7 (AIN1) PD7
    #define LCD_CS 7 // neu // #define LCD_CS 11
    // D8 (ICP1) PB0
    // D9 (OC1A) PB1 (PWM)
    // D10(SS/OC1B) PB2 (PWM)
    // D11(MOSI/OC2) PB3 (PWM)
    #define PIN_BL 11 // Pin 7 on LCD -> D11 auf nano
    // D12(MISO) PB4
    // D13(SCK) PB5 (LED)

    // ANALOG
    // A0 (ADC0) PC0
    // A1 (ADC1) PC1
    // A2 (ADC2) PC2
    // A3 (ADC3) PC3
    // A4 (ADC4/SDAglb) PC4
    // A5 (ADC5/SCLgrn) PC5
    //#if defined(__AVR_ATmega328P__)

    #elif defined(__AVR_ATmega1284P__)

    // m1284p
    // mighty ARDUINO +----\/----+
    // RST |1 ISP 36| VCC
    // RX0 (D 8) PD0 |2 | PB7 (D 7) PWM/SCK
    #define LED_ARDUINO 7
    #define LED_ARDUINO_PORT PORTB
    #define LED_ARDUINO_DDR DDRB
    #define LED_ARDUINO_ON LED_ARDUINO_PORT |= (1<<LED_ARDUINO)
    #define LED_ARDUINO_OFF LED_ARDUINO_PORT &= ~(1<<LED_ARDUINO)

    // TX0 (D 9) PD1 |3 | PB6 (D 6) PWM/MISO
    // RX1/INT0 (D 10) PD2 |4 | PB5 (D 5) MOSI
    // TX1/INT1 (D 11) PD3 |5 | PB4 (D 4) PWM/SS
    // PWM (D 12) PD4 |6 | PB3 (D 3) PWM
    #define LCD_DC 12

    // PWM (D 13) PD5 |7 | PB2 (D 2) INT2
    #define LCD_MOSI 13

    // PWM (D 14) PD6 |8 | PB1 (D 1)
    #define LCD_SCK 14

    // PWM (D 15) PD7 |9 | PB0 (D 0)
    #define PIN_BL 15 // Pin 7 on LCD -> D11 auf nano
    // | |
    // | |
    // SCLgrn (D 16) PC0 |10 27| PA0 (AI 0 / D24)
    #define PIN_SCL 16 //PC0 -> D16

    // SDAglb (D 17) PC1 |11 26| PA1 (AI 1 / D25)
    #define PIN_SDA 17 //PC1 -> D17

    // TCK (D 18) PC2 |12 25| PA2 (AI 2 / D26)
    #define LCD_RST 18 // neu // #define LCD_RST 10 // alt

    // TMS (D 19) PC3 |13 24| PA3 (AI 3 / D27)
    #define LCD_CS 19 // neu // #define LCD_CS 11

    // TDO (D 20) PC4 |14 23| PA4 (AI 4 / D28)
    // TDI (D 21) PC5 |15 22| PA5 (AI 5 / D29)
    // (D 22) PC6 |16 21| PA6 (AI 6 / D30)
    // (D 23) PC7 |17 20| PA7 (AI 7 / D31)
    // GND |18 19| AREF
    // +----------+

    #define TIMSKx TIMSK3
    #define OCIExA OCIE3A
    #define TIMERx_COMPA_vect TIMER3_COMPA_vect // ATmega
    #define TCCRxA TCCR3A
    #define COMxA0 COM3A0
    #define OCRxA OCR3A
    #define TCCRxB TCCR3B
    #define WGMx2 WGM32
    #define CSx0 CS30
    #endif

    #endif // _PINS_H_

    somit sieht meine ISR für beide Prozzis gleich aus

    Spoiler anzeigen


    void irq_set(void)
    {
    cli(); // disable global interrupts
    TCCRxA = 0; // set CTC

    OCRxA = (F_CPU / F_INTERRUPTS) - 1;
    TCCRxB = 0; // same for TCCR2B
    TCCRxB |= (1 << WGMx2); // set CTC
    TCCRxB |= (1 << CSx0); // clk divider / 1

    sei(); // enable global interrupt
    }

    und LED_ARDUINO_ON auch egal welcher Arduino auch im AVR Studio

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (8. April 2016 um 13:24)

  • AVR Studio hab ich auch auf dem Rechner allerdings muß ich mich damit mal etwas beschäftigen.
    Mit der Arduino IDE läuft es grade so gut bei mir und für den Kleinkram reicht das aus.

    So langsam aber sicher komme ich bei den µC auch vorwärts.
    "Unterwegs um neue Welten zu entdecken" trifft es ganz gut.

    Danke für die Info's.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (8. April 2016 um 14:54)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!