- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 25

Thema: Wiederauferstehung des RP6? -- Erste Erfahrungen und Aufruf zum Austausch!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604

    Wiederauferstehung des RP6? -- Erste Erfahrungen und Aufruf zum Austausch!

    Hallo zusammen!

    [off-topic]
    Es ist nun knapp 12 Jahre her, dass ich hier im Roboternetz zuletzt aktiv war, und mangels besserer Ideen um Kontakt aufzunehmen – nun dieser Thread. Ganz schön lange Zeit! Ich hatte immer mit Wehmut daran gedacht, dass ich dieses Elektronik-Basteln nicht weiter verfolgt hab. Inzwischen hab ich mein Abi, sowie einen Bachelor & Master in Informatik gemacht, bin gerade gar sogar an der Promotion. Man könnte also meinen, inzwischen sollte ich genug technisches Verständnis mitbringen, um Projekte auch tatsächlich umsetzen zu können. An dieser Stelle nochmals vielen vielen Dank an all diejenigen, die mein jugendliches, neugieriges und unwissendes Ich hier vor so langer Zeit geduldig ertragen und mir stets mit Rat zur Seite gestanden haben! Zurück zum Thema...
    [/off-topic]

    Ich habe also am Wochenende mal in meiner alten Bastel-Kiste gestöbert und bin doch gleich beim Robby hängen geblieben. Da war mir schnell klar, der Robby soll wieder Leben eingehaucht bekommen! Also dann, wie ging das nochmal?

    Erste Schritte waren (eigentlich) ganz machbar:
    • Die neuste Software von der Webseite gezogen und die avr-gcc Toolchain für Linux aus den Distro-Packages installiert.
    • Kompilieren der Examples funktioniert, sofern man die Makefiles leicht anpasst: 'RP6lib' sollte wohl 'RP6Lib' heißen und der neuere Kompiler möchte gern das '-fcommon' Flag gesetzt haben damit er die Dateien linken will.
    • Der Robotloader erkennt unter Linux (Fedora 37) sofort den USB-Comport und läuft mit openjdk 17.0.5 bislang problemlos. Die LEDs blinken!


    Wohin also nun? Erste Ideen gibt es schon:
    • Ich habe inzwischen einen Co-Bastler gefunden, der auch Interesse hat den Robby zu reaktivieren. Leider hat er noch keine Kenntnisse beim Programmieren, dafür kann er Löten und versteht was von Mechanik und normalen elektronischen Schaltungen. Falls jemand für ihn noch einen zweiten Robby (egal ob erste oder zweite Version) rumstehen hätte den er uns gegen ein paar Bier anbieten möchte, dürft ihr Euch natürlich gerne melden.
    • Ich arbeite derzeit beruflich mit rust, und da gibt es ja auch ein vielversprechend aussehendes Hardware-Abstraktionslayer das unseren Atmega32 unterstützt. Mal sehen ob ich das hinkriege, wäre mein erstes Embedded-Projekt mit rust. Eventuell jemand Lust sich für eine Portierung der RP6Lib zusammenzutun?
    • Fürs erste würden wir wohl gerne eine Schaufel o.Ä. an den Robby basteln, die dann per Servo abkippen und ein wenig "autonom" herumfahren. Ich denke dann fallen uns eh 1000 neue weitere Dinge ein.


    Was machen Eure Robbies denn so inzwischen?


    LG Roland
    Geändert von Pr0gm4n (09.01.2023 um 23:18 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604

    Update und erste Erfolge!

    Heut Abend ging es also hoch motiviert ans Werk – mit Erfolg. Nach etwas Kampf mit den verschiedenen mäßig dokumentierten Ressourcen zu Rust Programmierung für AVR Targets läuft es nun also. Alles bisher einfach noch so "zusammengehackt", aber das kann man sicher noch aufräumen. Die Verwendung von Raw-Pointern erfordert in Rust das "unsafe" Keyword und hebelt die Spracheigenen Checks daher an manchen Stellen aus. Das wird sich für den Hardware-Zugriff wohl nicht umgehen lassen, jedoch großteils in Libraries verschieben lassen. Der Code den man als Entwickler dann schlussendlich schreibt, kann sich meiner Meinung nach schon sehen lassen:

    Code:
    #![no_std]
    #![no_main]
    
    use rp6::*;
    
    /// entry point for the embedded rust program
    #[no_mangle]
    pub extern "C" fn main() {
        RobotBase::init();
        UART::write_str("Hello world!\n");
    
        let init_leds: u8 = 0b001001;
        let mut running_light: u8 = init_leds;
        loop {
            // set LEDs according to the binary number `running_light`
            RobotBase::set_leds(running_light);
    
            // sleep for one second
            delay_ms(250);
    
            // shift to the left for the 'running' effect
            running_light <<= 1;
    
            // reset to the initial LED pattern after the last LED was lit
            if running_light > 0b111111 {
                running_light = init_leds;
            }
        }
    }
    Für mehr Details hab ich das Projekt schon mal auf Github gepackt. Ich werde sicherlich in den nächsten Tagen noch eine Beschreibung basteln, was man für den Build alles für Dependencies hat. Falls es jemand nicht erwarten kann, schaut mal nach "rustup override set nightly" (verwenden alle Rust AVR Projekte) und verwendet das Makefile im Repository. Was sind denn so generell die Meinungen vom ersten Eindruck? Könnte sich jemand vorstellen, dass Rust auch hier im (Hobby-)Embedded-Bereich eine Rolle spielen könnte? Mir gefällt, dass es eine wirklich moderne und mächtige Sprache ist, und ich freue mich insbesondere darauf ihre Pattern-Matching Features nutzen zu können. Das sorgt in der Regel für echt übersichtlichen Code, bei dem vor allem garantiert wird dass man keinen Fall vergessen hat. Mal sehen, wie gut sich das auf den Embedded-Bereich überträgt.

    Nächste Schritte:
    Man sieht vlt. im Github Repo schon in welche Richtung ich gerade tendiere. Das Modul "avr" ist aus dem ruduino Crate zusammenkopiert, da ich den leider nicht als Dependency zum laufen bekommen habe. Die Idee wäre jedenfalls, deren Traits für Register und Pins wiederzuverwenden, dann bräuchte ich selbst in der Library kaum mehr "unsafe" Code schreiben. Zusätzlich wollte ich mir gerne noch diese HAL anschauen. Mal sehen, ob er den Atmega32 richtig abbilden kann, dann käme das auch in Betracht.

    So, es ist schon spät. Gute Nacht,
    Roland

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.08.2004
    Ort
    Unterschleissheim
    Beiträge
    332
    Hallo Roland
    ich habe auch noch einen RP6. Allerdings wartet hier das Fahrgestell auf die Elektronik. Hatte damals -sicher vor mehr als 10 Jahren- mit nem RP5 angefangen, aber nur Fahrwerk, ohne die dazugehörige Elektronik - und diese Elektronik selbergebaut (Lochrasterplatine mit nem Microchip PIC). Dann das Interesse verloren und das Fahrgestell verkauft. Als ich dann in Rente ging (bin schon 60+) kam das Interesse wieder und hab mir nen RP6 gekauft. Möchte da aber wieder meine selbstgebaute Elektronik einbauen. Bin aber im Moment mit anderen Elektronik-Projekten beschäftigt. Aber irgendwann fang ich wieder mit dem RP6 an...

    Gruß und weiter viel Spass
    Gerhard (Raum München)
    Geändert von gunzelg (10.01.2023 um 11:45 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hallo Gerhard,

    Das klingt doch super! Ich hoffe auch, dass mein Interesse für die Bastelei noch viele Jahre bestehen bleibt und ich mir mit zunehmender Unsportlichkeit vielleicht ja auch immer mehr Zeit dafür nehmen kann...
    Lass uns wissen wenn du dich wieder dran setzt, ich fand das immer ganz toll hier täglich Updates zu den verschiedenen Projekten der Leute zu lesen und aktiv mitzudiskutieren.

    Grüße nach Unterschleissheim (hab auch mal in Garching gewohnt & studiert),
    Roland

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Also ich hab mich nun dafür entschieden, eine eher simple Hardware Abstraktion auf Basis des Crates 'avrd' selbst zu bauen. Die anderen sind zwar vielleicht genereller, aber haben so komplizierte Build Chains dass ich die Einfachheit des RP6 vermisse. Ich möchte das gerne "schrittweise begreifbar" haben, also erst mal verwenden und wenn man dann doch mal in die Funktionen schaut, sollen die auch nicht gerade über 10 Ecken laufen.

    Prinzipiell, gibt es für das grundlegendste einfach die Funktionen:
    Code:
    port::c4::set_output();
    port::c4::set_high();
    port::c4::set_low();
    Gibt's erste Meinungen hierzu? Ich glaube eine ähnliche Abstraktion mal beim Arduino-C gesehen zu haben... oder?

    Ein Beispiel wie man mit dieser API dann die 'set_leds()' umsetzen könnte gibt's hier:
    https://github.com/Pr0gm4n/rust-rp6l...1a5134edc189fe

    Nun verwende ich also für Register und Pins als Basis mal die Traits 'Pin' und 'Register' vom 'ruduino' Projekt (vermutlich daher die Nähe zur Arduino Abstraktion...), auch wenn ich hier und dort noch etwas daran verändern möchte:
    - Es würde eigentlich Sinn machen, wenn der Rust Compiler genutzt wird um zu überprüfen, dass man nur Pins auf high/low setzt, die in dem Moment auch als Output konfiguriert sind. Sollte eigentlich machbar sein.
    - Ich werde wohl auch über eine Art 'Pingroup' nachdenken, die in der gleichen Port-Gruppe sind (also z.B. PB7, PB1 und PB0 für die LEDs 4-6). Mit dieser Pin-Abstraktion müsste man die sonst alle nacheinander setzen, muss ja eigentlich nicht sein. Und ich würde hoffen dass man dann solchen Code schreiben könnte:

    Code:
    use crate::ports::*;
    
    pub fn set_leds(value: u8) {
        // set LEDs 1-3 connected on PORTC
        let pin_group = PinGroup([c6, c5, c4]);
        pin_group.set_outputs();
        pin_group.set(value);
    
        // set LEDs 4-6 connected on PORTB
        let pin_group = PinGroup([b0, b1, b7]);
        pin_group.set_outputs();
        pin_group.set(value >> 3);
    }
    Dabei müsste die 'set(...)' Funktion halt automatisch anhand der Anzahl vorhandener Pins maskieren, bzw. einfach die unteren x Bits verwenden.


    Liebe Grüße,
    Roland
    Geändert von Pr0gm4n (11.01.2023 um 17:29 Uhr)

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.08.2004
    Ort
    Unterschleissheim
    Beiträge
    332
    Hallo
    bei deinem Code-Beispiel fühl ich mich erst mal als Oldi, da ich ausser Assembler nur in C programmiere (n kann ) Also das ist Rust?
    Roboter Programmieren ist für mich auch nur sowas wie Bitschubserei, deine Funktionen sehen aber toll aus, mal sehen, ob ich sowas auch in c zustande bringe...

    Gruß
    gerhard

Ähnliche Themen

  1. Erste Erfahrungen mit Robomow RL 500 / Umbau
    Von robokalle im Forum Staubsaugerroboter / Reinigungs- und Rasenmähroboter
    Antworten: 76
    Letzter Beitrag: 07.07.2019, 14:30
  2. Antworten: 17
    Letzter Beitrag: 01.09.2016, 19:20
  3. erste erfahrungen mit CSA-1V ... berührungslose strommessung
    Von kolisson im Forum Sensoren / Sensorik
    Antworten: 9
    Letzter Beitrag: 14.10.2010, 10:21
  4. Erste Erfahrungen mit dem AmTel - Cocktailmaschine
    Von alex007 im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 14
    Letzter Beitrag: 04.03.2009, 21:41
  5. [ERLEDIGT] Erste Erfahrungen mit dem Conrad Roboter
    Von im Forum Robby CCRP5
    Antworten: 8
    Letzter Beitrag: 22.05.2007, 13:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress