RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBO 2 Wie geht dieser Befehl?

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7433 private projects
  • 378 public projects
  • 16180353 lines compiled
  • 58212 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA: Wie geht dieser Befehl?

Wie geht dieser Befehl? 10 Jahre 8 Monate her #2670

  • achim S.
  • achim S.s Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 441
Hallo
Beim NDs3 werden die beiden Hilfs-Macros activate_output_bit und deactivate_output_bit verwendet. Kennt jemand diese Makros oder wo finde ich Infos dazu?
achim
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Wie geht dieser Befehl? 10 Jahre 8 Monate her #2672

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Definition der Makros in iodefs.h, Definition der Ports und Bits dann wieder in der iodefs_nibo2.h
activate_output_bit() setzt das Bit im DDR _Register, so dass das Bit/Pin als Ausgang funktioniert.
deactivate_output_bit() löscht das Bit, so dass der Pin wieder ein Eingang ist

Mit dem Makro _PPCAT(a,b) a##b werden zwei Parameter (aus iodefs_nibo2.h) zu einem Ausdruck verbunden.

Viel Erfolg beim knabbern (und lösen).
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Wie geht dieser Befehl? 10 Jahre 8 Monate her #2673

  • achim S.
  • achim S.s Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 441
Hallo Birger
Danke für deine Antwort
Bedeutet das ich einfach mit activate_output_bit und deactivate_output_bit den Port PB1 vom 84 ein und ausschalten kann?
Kann ich diesen Port auich "normal" ansprechen?
Welcher Impuls liegt eigentlich am MISO/Servo (PA5) an? (alles NDS3)
achim
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Wie geht dieser Befehl? 10 Jahre 8 Monate her #2674

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Moin Achim, ich konnte Dir nur auf Deine ursprüngliche Frage antworten..
Du müsstest Dir schon selber mal die Sourcen der nibolib anschauen.

Z.B. steht in der spi.c
void spi_init(void) {
  deactivate_output_bit(IO_ISP_SS);
  clear_output_bit(IO_ISP_SS);
  activate_output_bit(IO_ISP_MISO);
  set_output_bit(IO_ISP_MISO);
  spi_restart_transmission(0);
}

dann die iodefs.h
/* helper macro */
#define _PPCAT(a,b) a##b

/* Macro-functions for IO-bits */
#define set_output_bit(NAME) _PPCAT(NAME,_PORT)|=_BV(_PPCAT(NAME,_BIT))
#define clear_output_bit(NAME) _PPCAT(NAME,_PORT)&=~(unsigned char)_BV(_PPCAT(NAME,_BIT))
#define set_output_bitval(NAME, VAL) _PPCAT(NAME,_PORT)=(_PPCAT(NAME,_PORT)&~(unsigned char)_BV(_PPCAT(NAME,_BIT)))|((VAL)?_BV(_PPCAT(NAME,_BIT)):0)

#define activate_output_bit(NAME) _PPCAT(NAME,_DDR)|=_BV(_PPCAT(NAME,_BIT))
#define deactivate_output_bit(NAME) _PPCAT(NAME,_DDR)&=~(unsigned char)_BV(_PPCAT(NAME,_BIT))

#define get_input_bit(NAME) (_PPCAT(NAME,_PIN)&_BV(_PPCAT(NAME,_BIT)))
#define get_output_bit(NAME) (_PPCAT(NAME,_PORT)&_BV(_PPCAT(NAME,_BIT)))
 
und die iodefs_nibo2.h
/*! Display reset and SS */
#define IO_DISPLAY_RST       IO_DISPLAY_RST
#define IO_DISPLAY_RST_PIN   PINB
#define IO_DISPLAY_RST_PORT  PORTB
#define IO_DISPLAY_RST_BIT   0
#define IO_DISPLAY_RST_DDR   DDRB

/*! ISP MISO */
#define IO_ISP_MISO_PORT  PORTB
#define IO_ISP_MISO_PIN   PINB
#define IO_ISP_MISO_BIT   3
#define IO_ISP_MISO_DDR   DDRB

/*! ISP SS shared with display reset */
#define IO_ISP_SS         IO_DISPLAY_RST
 

und jetzt kannste nachvollziehen (und kommentieren) was passiert
void spi_init(void) {
  // Ansprache über Makro                  // Ansprache normal
  deactivate_output_bit(IO_ISP_SS); // -> DDRB &=~(unsigned char)(1<<0); // DDRB0 auf 0 setzen Eingang
  clear_output_bit(IO_ISP_SS);  // -> PORTB &=~(unsigned char)(1<<0); // Da jetzt Eingang - Pullup aus
  activate_output_bit(IO_ISP_MISO);  // -> DDRB |= (1<<3) // DDRB3 als Ausgang
  set_output_bit(IO_ISP_MISO); // -> PORTB |= (1<<3) // PORTB3 auf High
  spi_restart_transmission(0);
}
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Wie geht dieser Befehl? 10 Jahre 8 Monate her #2675

  • achim S.
  • achim S.s Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 441
Hallo Birger
Danke für deine Antwort. Muss ich mich wohl durchknappern. Habe ja immer gehofft, das es einen (relativ) einfachen Weg gibt oder wenigstens ein paar Hilfen dazu. Auch eine gute Erklärung hilft weiter. Bin es ja langsam gewöhnt Neuland zu betreten. Werde mal meine Hardware dazu testen. Man kann mit diesem Bereich (Tiny 84, zusätzliche IO) noch sehr viel machen. Auch das I2C hat noch viel Potential. Andere Modelle können es doch auch, warum Nibo nicht?
achim
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Wie geht dieser Befehl? 10 Jahre 8 Monate her #2687

  • achim S.
  • achim S.s Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 441
Hallo Workwind
könntest du mir weiterhelfen?
achim
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Ladezeit der Seite: 0.153 Sekunden

Werbung