PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierung >>> Raspberry Pi vs. AVR-uC



frabe
27.08.2019, 12:44
Hallo zusammen.

Beschäftige mich gelegentlich mit der Programmierung von AVR-uC (Bsp. ATTiny84) in C. Vorwiegend für Steuerungen, wie analoge/binäre Ein-/Ausgänge.
Hierzu nutze ich als Editor und Compiler das Atmel Studio 7.

Aus Hardwaregründen liebäugel ich mit dem Raspberry Pi -System. Hier ist schon alles On-Board in kleinster Bauform. Bsp: Zero, 3B

Wie unterscheidet sich die Programmierung?
Sind auch im RPi-uC, Interrupts möglich?
Ist hier die Hochsprache C, 1:1 übertragbar?
Gibt es innerhalb der RP-uC´s Programmierunterschiede? Unabhängig von den externen Hardware-Möglichkeiten wie WLan, etc.

Wäre schön, wenn ihr mir schon einmal eine grobe Übersicht an die Hand gebt.

Mxt
27.08.2019, 13:31
Hallo,

also in einer kurzen Antwort wird man das nicht erschöpfend beantworten können. Aber ich fange schon mal an:

Erstmal sprichts du von uCs, also vermutlich Microcontrollern. Rein formal sind die Chips auf den Raspis schon mal keine, sondern SoCs, Systems on a Chip. Die Prozesoren haben ARM-Cortex A Kerne, also Microprozessoren, keine Microcontroller, dass wären Cortex-M.

Normalerweise läuft auf solchen Prozessoren immer ein Betriebssystem, man kann nicht mit nackter Registerprogrammierung arbeiten. Meist ist das Betriebssystem auf dem Raspi Linux, es gehen aber auch andere inklusive Windows 10.

HaWe
27.08.2019, 13:59
hallo,
du programmierst den Pi am besten entweder in C/C++ (gcc) oder in Python.
Für die GPIOs verwendest du am besten Libs wie wiringPi (C und Python) oder pigpio (C); Interrupts sind möglich, auch WiFi, BT, USB usw. - du kannst aber auch die file-IO bzw. BCM-Funktionen verwenden (etwas umständlicher).
Wenn du einen kurzen Überblick über C/C++ Programmierung incl. Vorbereitungen sehen möchtest, guck mal hier:
https://github.com/dsyleixa/RaspberryPi/blob/master/sources/QuickGuide_Raspi.pdf
(für absolute Einsteiger geschrieben, teilw. stark vereinfacht, ursprünglich für Pi2 und Jessie konzipiert, aber grundsätzlich auch gültig z.B. für Pi3 und Stretch)

Bei C/C++ handelt es sich um gcc/gpp in veschiedenen verfügbaren Versionen (Stretch: vorinstalliert ab 6.3, selber nachinstallierbar auch bis zu vers. 9) mit offiziellen ANSI/ISO-Standards (C99, C11, C++14 bzw. 17), Python steht in Versionen 2 und 3 vorinstalliert zur Verfügung.

Du darfst aber nicht übersehen, dass C und C++ Library-basierte Sprachen sind, d.h. die Linux-libs z.B. für file-IO mit ihren Funktionen sehen schon etwas anders aus als die entsprechenden libs für AVRs.

frabe
27.08.2019, 15:11
DANKE!
Das Prinzip und die Schreibweise des C99 scheint gleich zu sein.
Das bedeutet das der Umstieg relativ einfach ist. ISR und Bit-Verschiebungen innerhalb eines Registers dürften auch gleich sein.

Wenn ich tatsächlich auf RPi-Hardware umsteige, würde ich in diesem Zusammenhang auch der Umstieg von C zu Python lohnen?
Was wäre mit Python bei der GPIO-Steuerung besser/einfacher?

Auch würde ich gerne ~mal eben~ einen Montior zur Ausgabe diverser Programm-Speicher nutzen (zB. Timerausgaben, etc.).

HaWe
27.08.2019, 15:50
DANKE!
Das Prinzip und die Schreibweise des C99 scheint gleich zu sein.
Das bedeutet das der Umstieg relativ einfach ist. ISR und Bit-Verschiebungen innerhalb eines Registers dürften auch gleich sein.

Wenn ich tatsächlich auf RPi-Hardware umsteige, würde ich in diesem Zusammenhang auch der Umstieg von C zu Python lohnen?
Was wäre mit Python bei der GPIO-Steuerung besser/einfacher?

Auch würde ich gerne ~mal eben~ einen Montior zur Ausgabe diverser Programm-Speicher nutzen (zB. Timerausgaben, etc.).

Ich arbeite immer direkt auf dem Pi, kein cross-Kompilieren und kein ssh, d.h. ich benutze ihn wie einen kleinen eigenständigen Mini-PC (was er ja auch ist).
Einfach HDMI-Monitor (ich empfehle wegen des GUI-Desktops 10", 13" oder größer - man kann auch umstöpseln) und Kbd/Maus dran und fertig!
Alle Text-Ausgaben erfolgen dann in einem Terminal-Window auf dem Raspi-Desktop (wie bei Windows), für Grafik-Ausgabe gibt es verschiedene Grafik-Libs (openVG, gtk, openCV uvm, siehe oben im Quick-Guide)

Python ist grundsätzlich einfacher, wenn man komplexe Funktionen z.B. für Multimedia nutzen möchte, wenn man diese Sprache mag ...
GPIOs, finde ich, kann man direkter, schneller und universeller per C programmieren.
Spiel einfach mal ein bisschen damit rum, ist ja alles vorinstalliert!

frabe
28.08.2019, 10:12
Python ist grundsätzlich einfacher, wenn man komplexe Funktionen z.B. für Multimedia nutzen möchte, wenn man diese Sprache mag ...
GPIOs, finde ich, kann man direkter, schneller und universeller per C programmieren.

Kann man in Python auch zeitkritsche GPIO-Anwendungen im [ms]-Bereich nutzen?
Würdest du je nach Anwendung unterschiedliche Sprachen verwenden? Also C bei GPIO und Python bei reinen Multimedia-Anwendungen.

Da RPi auf einem Linux-BS basiert, müsste es möglich sein, unterschiedliche Anwendungen in einen Prozessor zu schreiben.
Auch hier dürfte die Abgrenzung zu uC und Arduino sein...

- - - Aktualisiert - - -

Hallo noch einmal.
Ich bin hier über einen Artikel gestolpert, der besagt das die GPIO-Pins kein analoges Signalauslesen können. ZB. Potys, Spannungswerte, Sensoren.
https://tutorials-raspberrypi.de/raspberry-pi-mcp3008-analoge-signale-auslesen/
Wie ist das mit dem ADC bei dem Modell Raspberry Pi Zero WH v.1.1 ?

Habe einwenig quer gelesen - Python kommt mir hier sehr entgegen.
Wo finde ich eine Übersicht über mögliche Interrupts?
Bietet Python auch Timer im [us]- und 1-10[ms]-Bereich an?

Mxt
28.08.2019, 13:26
Mikrosekunden in Python glaube ich eher nicht. Python ist eine interpretierte Scriptsprache und deutlich langsamer als C. Seine Stärken liegen eher in anderen Bereichen.

Timer auf dem Raspi sind Linux Timer, die in irgendeiner Form von der Programmiersprache verpackt werden. Einen direkten Zugriff auf Hardwaretimer hat man da eher nicht, ist wie gesagt kein Mikrocontroller. Natürlich ist es möglich auf dem Raspi mehrere Anwendungen parallel auszuführen. Das unterscheidet sich nicht von einem Linux PC mit Intel Prozessor. Mir ist nicht ganz klar, was du mit "in einen Prozessor schreiben" meinst.

Analogeingänge bindet man eher über SPI oder notfalls I2C an. Das es beim Zero einen eingebauten ADC gibt, habe ich noch nicht gehört.

frabe
28.08.2019, 14:15
Kann man mit RPi und Python 1ms-Schritte realisieren?
Und den Timer in [ms] von Linux abrufen?

Für Analog-IO scheint ein externes IC; MCP3008 die erste Wahl zu sein.

Welche 7"-Display mit Touch könnt ihr für den RPi Zero WH empfehlen?

Sisor
28.08.2019, 15:59
Kann man mit RPi und Python 1ms-Schritte realisieren?
Generell ja. Natürlich kann sich das in ein Nein ändern, wenn du deine Anforderungen spezifizierst.

Und den Timer in [ms] von Linux abrufen? Ja.

Schau dir mal piGPIO (http://abyz.me.uk/rpi/pigpio/index.html) an. Das ist ein Deamon (Linux Hintergrundprozess), den man von der Kommandozeile, aus C/C++/D, Python und vom Netzwerk via TCP/IP ansteuern/programmieren kann. Damit kann man 'n ganze Menge anstellen. U.a. GPIO-Pins überwachen und im niedrigen µs-Bereich auf Änderungen reagieren.

frabe
29.08.2019, 08:28
Generell ja. Natürlich kann sich das in ein Nein ändern, wenn du deine Anforderungen spezifizierst.

Timer-Interrups verwende ich zZ. gerne als Zähler in einem Statemachine und zur Pin-(Eingang) Überwachung.
Von delay() halte ich überhaupt nichts - selbst einfache Blink-LEDs oder PWM gehen besser mit ms-Timer (Timer-Interrupt).

HaWe
30.08.2019, 19:10
wie gesagt, fang erst mal an: learning by doing!
Als ADCs verwende ich ADS12215 (mehrere mit verschiedenen arrd regs.

Was time und interrupts angeht:
wie gesagt, es geht, 1ms ist no problem. Und wenn du etwas mehr Erfahrung hast, wirst du auf Dinge stoßen, die beim Pi auch noch völlig anders gehen und von denen du bei AVRs noch nicht einmal träumen konntest.

Aber das später, wenn du etwas weiter bist. Ich empfehle dazu meinen Quick Guide sowie einige C-Tutorials aus den weiteren Literaturhinweisen.

frabe
03.09.2019, 10:58
Ich empfehle dazu meinen Quick Guide sowie einige C-Tutorials aus den weiteren Literaturhinweisen.

Hallo HaWe
Wo hast du deine "Quick Guite" versteckt?

Ceos
03.09.2019, 11:06
Wenn du einen kurzen Überblick über C/C++ Programmierung incl. Vorbereitungen sehen möchtest, guck mal hier:
https://github.com/dsyleixa/Raspberr...uide_Raspi.pdf (https://github.com/dsyleixa/RaspberryPi/blob/master/sources/QuickGuide_Raspi.pdf)
(für absolute Einsteiger geschrieben, teilw. stark vereinfacht, ursprünglich für Pi2 und Jessie konzipiert, aber grundsätzlich auch gültig z.B. für Pi3 und Stretch)


im 3ten Post des Artikel
der gekürzte Link ist nur etwas schwieriger zu suchen :P

ces
04.09.2019, 08:09
Mir gehts ähnlich wie frabe. Hinzu kommt das ich ewig meinem TRS-80 und BASIC nachtrauer. Wusste lange nicht das Python die konsequente Fortführung von Basic ist.
Also den aktuellsten Pi 3b+ für den nächsten Winter gekauft und mich gefreut das ich zeitgleich mit einer neuen Python Version anfange.
Mittlerweile ist der Pi4 da und schon wieder eine auf die veränderte Hardware "neue" Version Python und GUI. Jetzt kommts mir eher chaotisch vor, vermiest mir mein Vorhaben.
Allein das Logo von Thonny Python IDE kommt mir schon sehr minimalistisch vor. Ist es besser meinen PI 2b+ zu verwenden und auf das "alt bewährte" setzen?
Das Auseinanderbröseln der Kompatibilitäten kann man sich sparen?

frabe
04.09.2019, 10:44
Noch einmal vielen Dank an Alle konstruktiven Beiträge, innerhalb meiner Wegkreuzung; AVRs zu RPi oder Arduino & C vs. C++ vs. Python.
Ich werde auf die Arduino-Schiene, mit dem Teensy 3.2 in C++ umschwenken.
Die Tiefe und somit Kontrolle, in der AVRs programmiert werden ist beeindruckend. Leider ist es auch immer wieder ein Muss!
Um bei einem vorgenannten Bsp zu bleiben - ich brauche keinen Porsche um, durch Staus, täglich zur Arbeitsstelle zu kommen - da gibt es andere Werte die für mich zählen ;-)

ces
04.09.2019, 12:08
Dafür war ja der Pi Zero zum Preis von 5$ gedacht.

HaWe
05.09.2019, 11:25
ich finde die Entscheidung für einen M4 wie schon erwähnt schon sehr gut, gerade wenn keine Multimediafunktionen, Internet bzw. WiFi u/o AI gebraucht werden.
Der Overhead andererseits beim Pi durch Linux ist gewaltig, und das C/C++ nach POSIX-Standard bedeutet für einen Anfänger auf dieser Plattform einen gewaltigen Installations- und Einarbeitungsaufand.
Wenn aber Pi, dann sollte es IMO ein Multicore sein (also Pi2 aufwärts, nicht älter und nicht Zero), denn der Unix-kernel greift doch immer wieder mal in laufende Prozesse und Tasks ein und macht dann ein kalkulierbares zeitkritisches Verhalten äußerst schwierig (bei multicores kann das auf cores 1-2 erfolgen, während das eigene Prgramm auf cores 2-4 davon so gut wie unbehelligt bleibt).
Dank wiringPi allerdings sind die highlevel GPIO-r/w Funktionen fast Arduino-ähnlich ("Wiring"), was die Programmierung dann später doch recht stark vereinfacht.

Aber wie gesagt: kein Multimedia/web und auch sonst eher einfache und überschaubare GPIO-r/w basierte Programme: dann ist der M4 mit Arduino IDE eine ungeheuer gute Wahl (auch der ESP32 wäre hier erwägenswert).