Gibt es eine Möglichkeit, die Verkabelung eines bloßen Mikroprozessors mit einer Abschirmung zu vereinfachen?

7

Derzeit mache ich den größten Teil meiner AVR-Arbeit auf Steckbrettern, aber die große Auswahl an Arduino-Schildern und -Codes lässt mich fragen, ob ich manchmal nicht mit dem Kopf gegen die Wand stoße und nach Port-to-Pin-Zuordnungen suche, was sowohl Zeit verschwendet als auch verlangsamt mich runter. Gibt es eine bequeme Möglichkeit , AVRs anzupassen ( andere als die Pin-kompatibel mit den aktuellen Arduinos) zu Arduino Schilde?

Ignacio Vazquez-Abrams
quelle
Fragen Sie sich: Gibt es eine Möglichkeit, die Verkabelung eines bloßen Mikroprozessors mit einer Abschirmung zu vereinfachen?
Cybergibbons
1
@ Cybergibbons: Genau das frage ich.
Ignacio Vazquez-Abrams
1
Darauf habe ich keine Antwort. Ehrlich gesagt, meine Art, dies zu umgehen, besteht darin, fast ausschließlich I2C- oder SPI-Geräte zu verwenden, sodass nur wenige Pins zu beachten sind.
Cybergibbons
@JarrodRoberson Sie haben den AVR im Titel durch einen Mikroprozessor ersetzt. AVRs sind keine Mikroprozessoren, sondern Mikrocontroller, bei denen es sich um einen Mikroprozessor + Speicher + Peripheriegeräte usw. handelt. Sie haben auch das Wort Arduino von den Abschirmungen entfernt, aber die Frage bezieht sich auf Arduino-Abschirmungen, nicht Schilde im Allgemeinen.
alexan_e
@alexan_e lesen Sie die OP-Kommentare direkt über Ihre ...

Antworten:

4

Sie können Adapterkarten herstellen (eine für jedes MCU-Modell).

Die Unterseite (männliche Header) würde an das Steckbrett angeschlossen, und die Oberseite würde weibliche Header mit der gleichen Pinbelegung wie ein Arduino-Board haben (weibliche Hörer, die an den entsprechenden Positionen platziert sind, um den Arduino-Schilden zu entsprechen).

Ein solches Board sollte nicht schwer zu entwerfen sein.

Hier ist ein Bild, das dem ähnelt, was ich beschreibe

Geben Sie hier die Bildbeschreibung ein

Es würde die Pinbelegung eines bloßen AVR an die Pinbelegung eines typischen Arduino anpassen, so dass Abschirmungen direkt darüber gesteckt werden können.


Auch ein Pinbelegungsdiagramm kann nützlich sein, um die Arbeit zu beschleunigen, wenn Sie einen Bare-Chip mit Arduino-Code verwenden.
( Bildquelle ) Geben Sie hier die Bildbeschreibung ein

Eine andere ähnliche Lösung ist ein kleiner gedruckter Aufkleber auf dem AVR
( Bildquelle ).

Geben Sie hier die Bildbeschreibung ein

alexan_e
quelle
+1 für den didatischen Effekt des Adapterplatinenbildes UND SEHR ordentliches Steckbrett.
Ricardo
@ Ricardo Obwohl ich zustimme, dass es ein gutes Bild ist, ist es von einer anderen Seite (Quelle aufgeführt). Ansonsten tolle Antwort! Übrigens: Seien Sie vorsichtig, wenn die Abschirmung mit ICSP verbunden ist ... das Ethernet r.3 sorgt für zusätzliche Mega-Kompatibilität.
Anonymer Pinguin
2

Die Arduino-Methode dazu besteht darin, eine Nachschlagetabelle zu erstellen, die die Pin-Nummer in PORTn / DDRn / PINn SFR und das zugehörige Bit übersetzt. Sie können den gleichen Trick verwenden und die GPIO-Pins auf bequeme Weise zählen lassen, wie sie im Paket enthalten sind. Nur spezielle Peripheriegeräte (wie SPI / PWM) können auf diese Weise nicht berücksichtigt werden, da sie fest mit einem Pin verbunden sind.

Ein guter Anfang ist das folgende Arduino.hBibliotheks-Sniplet, wenn Sie dieses Konzept wiederverwenden möchten.

// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.

#define analogInPinToBit(P) (P)

// On the ATmega1280, the addresses of some of the port registers are
// greater than 255, so we can't store them in uint8_t's.
extern const uint16_t PROGMEM port_to_mode_PGM[];
extern const uint16_t PROGMEM port_to_input_PGM[];
extern const uint16_t PROGMEM port_to_output_PGM[];

extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];

// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
// 
// These perform slightly better as macros compared to inline functions
//
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
#define analogInPinToBit(P) (P)
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )

Die pinMode, digitalWriteund digitalReadFunktionen definiert werden , in /usr/share/arduino/hardware/arduino/cores/arduino/wiring_digital.cdenen für die weitere Inspiration verwendet werden.

Jippie
quelle
Während diese Antwort den Softwareteil abdeckt, fragt meine Frage tatsächlich nach dem Hardwareteil.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams kannst du dann in deiner Frage etwas näher darauf eingehen? Ich bin mir nicht sicher, ob ich verstehe, was du fragst.
Jippie
Ich habe nackte AVR-Chips und möchte sie mit vorhandenen Arduino-Abschirmungen verwenden, ohne ein paar Dutzend Überbrückungskabel hinzufügen zu müssen.
Ignacio Vazquez-Abrams