Forum: Mikrocontroller und Digitale Elektronik vom PIC18f umsteigen?


von Einsteiger mit Pause (Gast)


Lesenswert?

Hallo zusammen,

habe mit dem PIC 18f4550 vor geraumer Zeit einige kleine Projekte 
gemacht (LCD, USB, Led ein/aud ;) ) und dann längere Zeit nichts.

Achja ich bin Hobbyhobby-Bastler und wenn ich mit einem Controller mit 
Kanonen auf Spatzen schiesse ist mir das egal ;)

Nun zu meiner Frage:

Soll der Schuster bei seinen Leisten bleiben, oder macht es Sinn 
umzusatteln.

Hab irgendwo gelesen, dass sich die PIC 32 "angenehmer" programmieren 
lassen.

Oder vllt sollte ich auf die Arduino-Welle mit aufspringen um mir das 
Leben leichter zu machen?

Von Microchip gibt es da doch auch dieses chipKIT.

Einen MSP 430 hab ich auch noch, da gab es ja mal diese Einkaufswelle 
hier im Forum, da musste ich mitkaufen, hab das Teil aber noch nicht mal 
ausgepackt...



Zu meinen Anforderungen kann ich nicht viel sagen, dass ist spontan, 
gerade habe ich mit ein BTM 222 gekauft und Temperatursensoren (1-Wire) 
liegen auch noch hier rumm.

Bitte einfach mal die Meinung raushauen, außer es ist nicht konstruktiv 
sondern reine Kritik an irgendwas ;)

von Einsteiger mit Pause (Gast)


Lesenswert?

nix dazu zu sagen?

von iaoffline (Gast)


Lesenswert?

Einsteiger mit Pause schrieb:
> Soll der Schuster bei seinen Leisten bleiben, oder macht es Sinn
> umzusatteln.

Moderne Mikrocontroller unterscheiden sich nur in Details. Die 
Unterschiede sind so gering das man sich endlos darüber streiten 
kann;-).

Wenn du Schwierigkeiten mit einem hast wird das mit dem nächsten in 
nichts besser. Ein Wechsel macht kirre ohne das dadurch Voreile 
entstehen.

Durchbeißen, selbst das Schlaraffenland hatte einen Reisberg am Eingang.

von heinzhorst (Gast)


Lesenswert?

Bin vor noch nicht allzu langer Zeit von PIC18 auf PIC24 umgestiegen. 
Die Peripherie ist deutlich besser und nahezu identisch zum PIC32. Habe 
aber auch PIC32-Erfahrung. Aber auch PIC32 gibts es reichlich fertige 
Libraries von Microchip für viele Standartprobleme. Gerade als 
Hobbybastler solltest du dir die neuen PIC32 im DIP28-Gehäuse mal 
ansehen.

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

Einsteiger mit Pause schrieb:
> nix dazu zu sagen?

Naja, was soll man dazu schon groß sagen...
Das Problem ist das ich (und wahrscheinlich auch der großteil der 
anderen) überhaupt nicht erkennen kann WARUM du überhaupt umsteigen 
möchtest.

Ob die PIC32 leichter zu Programmieren sind oder nicht hängt von deinem 
Inidviduellen Programmierstil  und natürlich auch vom Geschmack ab. Der 
Befehlssatz in den Librarys ist deutlich umfangreicher.
Zudem ist der Aufwand damit der PIC32 überhaupt etwas tut um einiges 
höher.

Ich würde das so sagen:
Zum Lernen, als Einsteiger, ist der PIC18 DEUTLICH einfacher. Die 
Umsetzung großer Projekte ist dann aber auf dem PIC32 einfacher, einfach 
weil dieser mehr Ressourcen hat.

Allerdings kann ich keinen Grund erkennen warum du nicht beide Serien 
nebeneinander Benutzen willst/kannst?
Die IDE ist dieselbe, das Programmiergerät ist, wenn man eine gescheite 
Wahl getroffen hat, dasselbe. Der Befehlssatz ist über weite TEile 
identisch. Der PIC32 hat mehr Befehle, allerdings kann man auchmit dem 
Grundstock der PIC spezifischen Befehle die in beiden Compilern 
unterstützt sind komplette PIC32 Programme schreiben. Ist halt in 
einigen Fällen etwas aufwendiger als nötig...
(Will man einen IO als Input setzen: Es gibt einen PIC32 BEfehl 
"PORTSetPinsDigitalIn" den man verwenden kann. Genauso wie es ähnliche 
Befehle für Analog Input oder diverse Ausgänge gibt.
Aber auch ohne den Befehl geht es natürlich dann setzt man halt händisch 
das Tris REgister, schaltet ggf. die AD Wandler ab und auch die evtl. 
vorhandene andere Pripherie)

Der Vorteil bei den PICs ist es ja gerade, das man mit ein und derselben 
Ausrüstung sowie ein und derselben ENtwicklungsumgebung eine sehr Breite 
Auswahl verschiedenster Controller diverser Leistungsklassen 
programmieren kannst. Da zudem selbst in den dem einfachen Hobbyisten 
zugänglichen Vertriebskanälen die angebotene Bandbreite groß ist spricht 
doch nichts dagegen sich jeweils den benötigten Controller auszusuchen. 
(NAtürlich kann man sich für einfache Dinge auf eine kleine Auswahl 
Controller einschränken die man auf Vorrat hat. Bei den 18ern würde ich 
z.B. den 18F45K20, den 18F4550 sowie als "kleinen" noch den 18F14K50 in 
betracht ziehen. den 45K20 sowie 14K50 bekommt man für um die 2Euro.

Bei den PIC32 ist der PIC32MX795F512L so ziemlich die obere Fahnenstange 
der wohl alles was der Hobbybastler braucht Abdeckt. Allerdings mit um 
die 10Euro pro µC schon eine Hausnummer. Da macht es schonmehr Sinn auch 
mal etwas kleiner zu denken.

Vom PIC abgesehen:
Wenn du schon C Beherscht, dann würde ich ARDUINO maximal als ergänzende 
HArdwarebasis ansehen. Es spricht ja nichts dagenen die "Shields" für 
eigene ZWecke zu nutzen. Auf die eigene Sprache würde ich aber 
verzichten...

Wenn es dir darum geht "mit Kanonen auf Spatzen" zu schiessen könnte man 
auch noch die ARM (am ehesten CORTEX M3) ins Spiel bringen. Allerdings 
sind hier die für "normale Bastler" möglichen Einkaufsmöglichkeiten 
beschränkt und du brauchst neue Software und HArdware. Dazu kommt das 
die meisten Compiler in den freien Versionen Codegrößenbeschränkt sind.
Von der Leistungsfähigkeit liegen die im Bereich der PIC32. Aber auch 
hier gilt, das komplexe Programme deutlich einfacher sind als auf den 
8Bittern, aber gerade die ganz einfachen Dinge wie "Pin Toggeln" oder 
generell der einsatz FÜR EINFACHE STEUERZWECKE im vErgleich zu 8Bit mehr 
aufwand erfordert. Aber darüber nachdenken könntest du mal. Wie gesagt, 
die Leistungsfähigkeit - und vor allem das Preis Leistungsverhältniss 
wenn man die möglichkeiten WIRKLICH Ausnutzt sind da sehr gut. (Nütz nur 
nichts wenn man nur 5% des Programmspeichers sowie zwei AD Wandler 
ausnutzt und der Rest abgeschaltet ist. Dann ist P/L grottig)

Argumente gegen MSP430 fallen mir gerade fast genausowenig ein wie 
dafür. Wer den Mag kann den gerne Verwenden. Ich sehe allerdings in dem 
Wechsel keinen Vorteil gegenüber PIC. Ob die zwei NAchteile die mir 
einfallen in deinem Fall auch als NAchteil in erscheinung treten kannst 
nur du alleine beurteilen. Wobei die auch nicht gravierend sind:
1.) Der MSP430 ist ein 16Bit Controller, es gibt keine 8Bit und auch 
keine 32Bit Controller die du mit identischen WErkzeugen programmieren 
kannst.
2.) Der MSP430 ist unter Hobbyisten weniger verbreitet, also etwas 
geringere Bezugsmöglichkeiten und Unterstützungsmöglichkeiten in Foren 
o.ä.
(Für kommerziellen Einsatz spielt beides keine Rolle)

NAtürlich könnte man noch einen Wechsel auf AVR in Betracht ziehen.
Aber auch hier sehe ich keine Vorteile. ISt in etwas gleichwertig.
Was unterschiedlich ist, das ist der Support mit Software und Librarys.
Für den AVR kommt sehr viel aus der "Community" und verhältnissmäßig 
wenig von ATMEL selbst.
Beim PIC kommt eine sehr breite Softwareunterstützung vom HErsteller. Da 
dadurch aber Bedarf für Selbstentwickeltes gering ist weniger aus 
Drittquellen. Es ist eine Geschmackssache was man besser findet. Ich 
plädiere ganz stark für "alles aus eine Hand", was dann PIC bevorteilt.
Aber andere sehen es anders.
Ein ähnlichen Unterschied gibt es bei der Modellpalette.
AVR haben eine recht überschaubare PAlette mit durchaus Leistungsfähigen 
Controllern (viel Speicher, viel Peripherie)die sich teilweise nur im 
GEhäuse unterscheiden. Universalisten halt.
PIC hat zwar auch solche Generalisten die man als Standardcontroller 
nehmen kann, aber eine sehr viel breitere und vor allem besser 
verfügbare Palette an "SPEZIALISTEN" (So waren USB AVR bis vor kurzem 
für Hobbyistren nur über einige kleine Händler teuer zu bekommen. 
Mittlerweile hat die aber Reichelt auch) Auch hier ist es wieder eine 
Geschmacksfrage...

Ein für einige Bastler wichtiger Punkt ist das Gehäuse der µC. Atmel 
bringt viele AVR nur noch in SMD heraus. So gibt es z.B. KEINE AVR mit 
USB Schnittstelle in DIP. Microchip hingegen bringt bei so gut wie allen 
µC die mit 40 Pinne oder weniger daherkommen auch immer noch eine DIP 
version heraus die man dann bequem auch auf Lochraster oder Steckbrett 
verwenden kann. Auch 16Bit, ja sogar, wie ich die Tage erst bemerkt 
habe, 32BIT µC sind in DIP verfügbar!
Aber auch hier kannst nur du selber beurteilen ob das ein argument für 
dich ist.

Also: Beurteilen kannst nur du selbst. ICh würde bei PIC Bleiben, da 
kennst du die Software und verfügst über die Hardware. Compiler sind 
ohne jede Größenbeschränkung in der freien Version verfügbar. Gute SW 
unterstützung. Lernen und wissen Vertiefen ruhig weiter auf den 18F. 
Wenn es das Projekt zulässt auch ruhig mit einem kleineren PIC als den 
4550 für 4 Euro. Pics derselben Leistungsklasse ohne USB gibt es schon 
für 2 Euro.
ISt dann der Bedarf mal für mehr Rechenleistung da, dann greifst du für 
dieses Projekt halt zum PIC24 oder gar PIC32... ganz nach belieben. 
Funktioniert ja alles mit derselben IDE und Programmierhardware.

Aber das ist nur meine Meinung unter  Berücksichtigung MEINER 
Prioritäten.
Du musst dir schon selber Gedanken machen.

Gruß
Carsten

von Einsteiger mit Pause (Gast)


Lesenswert?

Vielen Dank für diesen langen und hilfreichen Post. Ich denke, ich 
bleibe dann bei den PIC18f und schaue mir ein wenig die Beispielcodes 
für die PIC32 an. Sollten diese mir besser gefallen, kann ich ja 
wechseln oder beides betreiben.


Vielen vielen Dank.

von arduino (Gast)


Lesenswert?

Carsten Sch. schrieb:
> Wenn du schon C Beherscht, dann würde ich ARDUINO maximal als ergänzende
> HArdwarebasis ansehen. Es spricht ja nichts dagenen die "Shields" für
> eigene ZWecke zu nutzen. Auf die eigene Sprache würde ich aber
> verzichten...

Kannst du mal bitte erklären was "die eigene Sprache" ist?

von Carsten S. (dg3ycs)


Lesenswert?

arduino schrieb:
> Carsten Sch. schrieb:
>> Wenn du schon C Beherscht, dann würde ich ARDUINO maximal als ergänzende
>> HArdwarebasis ansehen. Es spricht ja nichts dagenen die "Shields" für
>> eigene ZWecke zu nutzen. Auf die eigene Sprache würde ich aber
>> verzichten...
>
> Kannst du mal bitte erklären was "die eigene Sprache" ist?

Ja, "eigene Sprache" ist evtl. nicht ganz korrekt, ABER: ISt es nicht 
so, das zu dem Konzept ein stark vereinfachtes C gehört?
JA - ich weiß der Grundstock ist C und wenn ich das jetzt richtigim Kopf 
habe sogar gcc als Compiler. Aber es ist doch so, das wer mit Arduino 
zurecht kommt nicht zwangsläufig auch andere C programmierbare µC ans 
laufen bekommt. Andersherum aber geht es.

GRuß
Carsten

von MCUA (Gast)


Lesenswert?

>Zum Lernen, als Einsteiger, ist der PIC18 DEUTLICH einfacher.
Der hat aber immer noch ein rel. schlechte Architektur. PIC24,33 ist da 
viel besser, und ist zT abwärtskompatibel.
PIC32 ist was ganz anders, ist MIPS. (Perif. allerdings ähnlich)

von arduino (Gast)


Lesenswert?

Carsten Sch. schrieb:
> Ja, "eigene Sprache" ist evtl. nicht ganz korrekt, ABER: ISt es nicht
> so, das zu dem Konzept ein stark vereinfachtes C gehört?
> JA - ich weiß der Grundstock ist C und wenn ich das jetzt richtigim Kopf
> habe sogar gcc als Compiler. Aber es ist doch so, das wer mit Arduino
> zurecht kommt nicht zwangsläufig auch andere C programmierbare µC ans
> laufen bekommt. Andersherum aber geht es.

Es ist C/C++. Da werden noch ein paar Funktionsprototypen generiert und 
das war es dann. Jemand der sich ernsthaft mit dem Arduino 
auseinandersetzt, wird schnell auch mit den AVRs klar kommen. 
Interessant ist übrigens auch das Arduino-Framework auf den anderen AVRs 
einzusetzen...

von Manfred (Gast)


Lesenswert?

MCUA schrieb:
>>Zum Lernen, als Einsteiger, ist der PIC18 DEUTLICH einfacher.
> Der hat aber immer noch ein rel. schlechte Architektur.

Was ist daran schlecht und inwiefern ist das für C und/oder für Anfänger 
relevant?

> PIC24,33 ist da
> viel besser, und ist zT abwärtskompatibel.
> PIC32 ist was ganz anders, ist MIPS. (Perif. allerdings ähnlich)

Warum bzw. in welcher Hinsicht ist der PIC24,33 "viel besser"?

von hro (Gast)


Lesenswert?

Nimm eine ARM-System mit Linux, kostet fast nix und Du hast so viele 
Moeglichkeiten der Programmierung ...
Einzige Einschraenkung ist vielleicht, wenn Du harte Echtzeitfaehigkeit 
brauchst, aber das ist ja eher selten.

Aber allein die Erfahrung "auf einem uC direkt zu programmieren" ist 
schon ein Erlebnis.

Gruss hro

von heinzhorst (Gast)


Lesenswert?

hro schrieb:
> Nimm eine ARM-System mit Linux, kostet fast nix und Du hast so viele
> Moeglichkeiten der Programmierung ...

Man kann auch mit nem 40-Tonner nen einzelnen Schuhkarton 
transportieren...

Uns man braucht nicht für jede Aufgage ein ausgewachsenes 
Betriebssystem, das selbst noch eine Menge Resourcen frisst. Versuch 
mal, ohne externen RAN und Flash Linux auf nem ARM laufenzulassen.

Definiere doch mal "fast nix". Industrielle Systeme OEM-Boards gehen 
bestenfalls bei 60 EUR los. Wenn du irgendwelches Consumer-Schüttgut wie 
z.B. Dockstar zweckentfrremdest bist du immernoch ca. 20 EUR los. 
Gegenüber ca. 2 EUR für ne 8-Bitter. Und da vergleicht man auch schon 
Äpfel mit Birnen. Wie willst du an einfertiges Consumergerät vernunftig 
eigene Peripherie anbinden? Z.B. Analogeingänge, PWM, 
I²C-Temperatursensoren...etc.

von Peter D. (peda)


Lesenswert?

heinzhorst schrieb:
> hro schrieb:
>> Nimm eine ARM-System mit Linux, kostet fast nix und Du hast so viele
>> Moeglichkeiten der Programmierung ...
>
> Man kann auch mit nem 40-Tonner nen einzelnen Schuhkarton
> transportieren...

Ja, ich verstehe auch nicht, daß immer so maßlos übertrieben werden muß.

Mein Lieblings-MC ist ein 8-Pinner (ATtiny25), für kleine Projekte ideal 
und bequem in C zu programmieren.
Und wenn ich mehr IO-Pins brauche, kommt einfach der 14-Pinner 
(ATtiny24) bzw. 20-Pinner (ATtiny261).
Der 28-Pinner (ATmega328p) ist bei mir schon der Bolide für riesig große 
Programme.

Ich mag es auch, daß ich nur einen Chip in die Schaltung einsetzen muß.
Und nicht ein teures Board mit nem Linux-MC und der benötigten riesen 
externen Beschaltung.


Peter

von Andreas (Gast)


Lesenswert?

Also ich bin vor einiger Zeit weil ich mehr Rechenperformance benötigte 
von PIC16/PIC18 auf dsPIC umgestiegen und habe es allgemein nicht 
bereut.

Dort gibt es die kleinen Controller (mit wenig pins und kleine Bauform) 
aber eben auch etwas leistungsfähigere. Zudem ist für den Betrieb kaum 
Peripherie notwendig.

Ich habe es auch deshalb nicht bereut, weil die Hardwareausstattung 
besser ist.

Wenn es dir bei der Entwicklung um gute Debugging-Möglichkeiten geht, 
dann dünken mich andere Controller / Plattformen besser. Wenn ich mir da 
z.B. gcc in Verbindung mit einem ARM-Controller anschaue. Es gibt 
wahrscheinlich auch mehr Libraries, die man ungehinderter übernehmen 
kann.

Kommt halt sehr auch darauf an was du machen möchtest und was dir dabei 
wichtig ist.

Beste Grüsse

Andi
PS: Ein Kollege von mir programmiert seit Jahren mit PIC10 und PIC12 und 
ich bin immer wieder erstaunt, was er mit dieen putzigen Controller all 
so Schönes machet. Irgendwie hat das Kleine auch seinen Reiz

von hro (Gast)


Lesenswert?

Wenn's klein sein MUSS oder ein Massenprodukt herauskommen soll oder es 
"nur" fuer den privaten Spass ist, dann haben die kleinen schnuckeligen 
uCs sicher ihre Berechtigung (ich programmiere darauf auch oft in 
Assembler wg. harter Echtzeitfaehigkeit und weil's klein sein muss).

Wenn es aber auf eine universelle Plattform ankommt, die man moeglichst 
universell einsetzen will, wenn Zeit fuer das Programmieren Geld kostet, 
wenn Rechenpower gefragt ist, wenn Anschlussmoeglichkeiten wie z.B. 
Netzwerk, USB usw. benoetigt wird, dann ist ein Linux-System die bessere 
Wahl.

Und ja, kostet so ab ca. EUR 50, bei Massenkauf sicher guenstiger, aber 
dann kommen ja evtl. wieder die Vorteile des uCs zum Tragen.

Und zum Thema "Kanonen auf Spatzen": Ich hoffe, Ihr nutzt dieses Forum 
nur auf einer Textkonsole.

Gruss hro

von heinzhorst (Gast)


Lesenswert?

hro schrieb:
> Ich hoffe, Ihr nutzt dieses Forum
> nur auf einer Textkonsole.

Wie soll ich denn da die Werbung sehen? Irgendwie muss der Laden hier ja 
auch finanziert werden.

von Peter D. (peda)


Lesenswert?

Andreas schrieb:
> PS: Ein Kollege von mir programmiert seit Jahren mit PIC10 und PIC12 und
> ich bin immer wieder erstaunt, was er mit dieen putzigen Controller all
> so Schönes machet.

Zu den PIC10 hat Atmel auch pinkompatible ATtiny4..10.
Blöder Weise hat Atmel da aber die Architektur drastisch geändert, so 
daß sie nicht mehr vom AVR-GCC unterstützt werden. Und C-Programmierung 
möchte ich auch für kleine Anwendungen nicht mehr missen.
Mit Codevision bzw. IAR kann man aber die 6-Pinner AVR auch in C 
programmieren.


Peter

von Einsteiger mit Pause (Gast)


Lesenswert?

;)

So ne Code-Vergleichseite gibt es nicht zufällig (AVR, Arduino, 
PIC18,PIC24, MSP, "Linux").

Am besten zieh ich mir wohl einfach für jeden die klassiches Beispiele 
für ne blinkende LED.

Es ist zwar HArdware nah, aber manchmal nervt mich das schon mit den 
einstellen der Register und der Grundeinstellung bei den PIC.

Da wäre mir ein

PortPinA0= Output;

PortPinA0=1

schon ganzt genehm.

von Michael S. (rbs_phoenix)


Lesenswert?

Einsteiger mit Pause schrieb:
> Es ist zwar HArdware nah, aber manchmal nervt mich das schon mit den
> einstellen der Register und der Grundeinstellung bei den PIC.
>
> Da wäre mir ein
>
> PortPinA0= Output;
>
> PortPinA0=1

Naja.. In PIC-ASM:
PortPinA0 = Output -> bcf TRISA,0
PortPinA0 = 1 -> bsf PORTA,0 bzw. bcf LATA,0

Und in C:
TRISA &= 0b11111110;
PORTA |= 0b00000001;
Da viele C-Compiler (zumindest alle, die ich bisher benutzt habe) einen 
bit-Datentyp eingefügt haben, gibt es auch noch sowas wie:
LATAbits.LATA0 = 1;

oder (mikroE z.B.):
sbit Ausgang0 at RA0_bit;
...
Ausgang0 = 1;


Einsteiger mit Pause schrieb:
> So ne Code-Vergleichseite gibt es nicht zufällig (AVR, Arduino,
> PIC18,PIC24, MSP, "Linux").

Das würde mich auch mal interessieren. Jedoch.. Was muss/soll gemacht 
werden. Mit oder ohne initialisierung. USB geht wohl auf nem Linux 
besser als auf nem PIC oder AVR aber dafür ist ein Ausgangsbit setzen 
wohl beim AVR/PIC einfacher..

von Arc N. (arc)


Lesenswert?

Michael Skropski schrieb:
> Einsteiger mit Pause schrieb:
>> Es ist zwar HArdware nah, aber manchmal nervt mich das schon mit den
>> einstellen der Register und der Grundeinstellung bei den PIC.
>>
>> Da wäre mir ein
>>
>> PortPinA0= Output;
>>
>> PortPinA0=1
>
> Naja.. In PIC-ASM:
> PortPinA0 = Output -> bcf TRISA,0
> PortPinA0 = 1 -> bsf PORTA,0 bzw. bcf LATA,0
>
> Und in C:
> TRISA &= 0b11111110;
> PORTA |= 0b00000001;
> Da viele C-Compiler (zumindest alle, die ich bisher benutzt habe) einen
> bit-Datentyp eingefügt haben, gibt es auch noch sowas wie:
> LATAbits.LATA0 = 1;
>
> oder (mikroE z.B.):
> sbit Ausgang0 at RA0_bit;
> ...
> Ausgang0 = 1;
>
>
> Einsteiger mit Pause schrieb:
>> So ne Code-Vergleichseite gibt es nicht zufällig (AVR, Arduino,
>> PIC18,PIC24, MSP, "Linux").
>
> Das würde mich auch mal interessieren. Jedoch.. Was muss/soll gemacht
> werden. Mit oder ohne initialisierung. USB geht wohl auf nem Linux
> besser als auf nem PIC oder AVR aber dafür ist ein Ausgangsbit setzen
> wohl beim AVR/PIC einfacher..

Sieben Funktionen implementieren (vier liefern nur eine Konstante 
zurück) bzw., wenn es für die Anwendung reicht, übernehmen (USB MSD mit 
internem Flash) und dazu ein paar ein Definitionen anpassen
http://ww1.microchip.com/downloads/en/AppNotes/01189a.pdf
HID und CDC
http://ww1.microchip.com/downloads/en/AppNotes/01163a.pdf
http://ww1.microchip.com/downloads/en/AppNotes/01164a.pdf
sind ebenso einfach umzusetzen bzw. können übernommen und erweitert 
werden.

von Einsteiger mit Pause (Gast)


Lesenswert?

Wie gesagt, USB hab ich ja auch ans laufen bekommen, geht schon 
irgendwie ;)

Ich denke halt manchmal muss man sich zu viele Gedanke num die Register 
etc. machen, kann auch sein, dass mir meine Gedanken da gerade einen 
Streich spielen, hatte noch keine Zeit reinzuschauen.

Für die LCD Ansteuerung hab ich mir ja auch nur ein paar "Einfache" 
Funktionen gebastelt um das LCD zu bedienen.

Aber ich denke da manchmal so an die Richtung VBA,

wenn da ne Zelle Rot sein soll, dann sag ich Zelle sei rot

cells(1,1).interior.colorindex= 4

(weiß noch nicht mal ob das gerade stimmt :) )

die ersten Zeilen beim Pic gehen ja auch erstmal ans initalisieren 
verloren, ok wenn man es reicht ja strg+c und strg+v und der aufwand ist 
gleich Null.

Deswegen ja die Idee/Frage, was tun, damit man eine blinkende LED sieht.

von Peter D. (peda)


Lesenswert?

Einsteiger mit Pause schrieb:
> Am besten zieh ich mir wohl einfach für jeden die klassiches Beispiele
> für ne blinkende LED.

Z.B. AVR-GCC:
1
#define F_CPU   1e6     // 1MHz
2
3
#include <util/delay.h>
4
#include "sbit.h"
5
6
int main()
7
{
8
  DDR_B0 = 1;           // output
9
  while(1){
10
    PORT_B0 = !PORT_B0; // toggle
11
    _delay_ms( 200 );   // wait
12
  }
13
}


Peter

von Einsteiger mit Pause (Gast)


Lesenswert?

/** I N C L U D E S 
**********************************************************/
#include <p18cxxx.h>
#include "delays.h"                       // für die Warteschleife

/** Configuration 
********************************************************/
#pragma config OSC = HS   //CPU=20 MHz
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF  //Watchdog Timer
#pragma config LVP = OFF  //Low Voltage ICSP


/** D E C L A R A T I O N S 
**************************************************/
#pragma code
void main(void)
{
  LATB = 0x00;
  TRISB = 0xFE;

  while(1)
  {
    LATB = 1;
    Delay10KTCYx(100);
    LATB = 0;
    Delay10KTCYx(100);
  }//end while
}//end main

von heinzhorst (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Z.B. AVR-GCC:#define F_CPU   1e6     // 1MHz
>
> #include <util/delay.h>
> #include "sbit.h"
>
> int main()
> {
>   DDR_B0 = 1;           // output
>   while(1){
>     PORT_B0 = !PORT_B0; // toggle
>     _delay_ms( 200 );   // wait
>   }
> }

Och nö...das blockiert doch.

von Einsteiger mit Pause (Gast)


Lesenswert?

Wobei das auf Sprut, wenn ich mich richtig erinnere so auch nicht 
funktioniert. Anstatt OSC war das FOSC glaube ich.

Das ist auf jedenfall das PIC Beispiel :)

von heinzhorst (Gast)


Lesenswert?

OK, wenn man NUR, die LED hat, dass reicht das ja.
Mit Tick-Modul aus ner Lib von Microchip:
1
#include "HardwareProfile.h"
2
#include "Tick.h"
3
4
TICK mytick;
5
6
void main(void){
7
8
  TickInit();
9
10
  while(1){
11
12
    if((TickGet()-mytick)>TICK_SECOND){
13
      mytick = TickGet();
14
      MYLED_IO ^= 1;
15
    }
16
17
    MachIrgedwasAnderes();
18
19
  }
20
}

Ist zwar nicht unbedingt für hart echtzeitfähige Sachen zu Empfehlen, 
aber dafür reicht's.

von Peter D. (peda)


Lesenswert?

heinzhorst schrieb:
> Och nö...das blockiert doch.

Kein Problem, wozu gibts Interrupts:
1
// Target: ATtiny13
2
#define F_CPU   1e6     // 1MHz
3
4
#include <avr/interrupt.h>
5
#include "sbit.h"
6
7
int main()
8
{
9
  DDR_B0 = 1;                           // output
10
  TCCR0A = 1<<WGM01;                    // Mode 2: CTC
11
  TCCR0B = 1<<CS02 | 1<<CS00;           // F_CPU / 1024
12
  OCR0A = F_CPU / 1024.0 * 0.2 - 0.5;   // every 200ms
13
  TIMSK0 = 1<<OCIE0A;                   // compare interrupt
14
  sei();                                // Interrupts on
15
  while(1){
16
  }
17
}
18
19
ISR( TIM0_COMPA_vect )                  // Interrupt handler
20
{
21
  PORT_B0 = !PORT_B0;                   // toggle
22
}


Peter

von Carsten S. (dg3ycs)


Lesenswert?

Einsteiger mit Pause schrieb:
> ...
> Ich denke halt manchmal muss man sich zu viele Gedanke num die Register
> etc. machen, kann auch sein, dass mir meine Gedanken da gerade einen
> Streich spielen, hatte noch keine Zeit reinzuschauen.
Naja, für C stimmt das in gewissem Maß für die SFR. So musst du alle 
HArdwareeinstellungn direkt setzen. Also ob der IO nun Ausgang oder 
EIngang ist - oder ob da jetzt ein ADC oder Digital in am Werk sein 
soll.
Das muss mindestens einmal geschehen, wenn sich einstellungen während 
der Laufzeit ändern mehrmals. Aber mit geschickter Programmierung kann 
man dies erheblich vereinfachen. Setzt natürlich ein wenig Erfahrung 
vorraus im wirklich gut darin zu werden.
Aber du WILLST ja LERNEN ;-)

Für ASM ist das natürlich anders. Da sind direkte zugriffe auf die GPR 
Register (aka RAM) wohl mit der zentrale Bestandteil des ASM.

>
> Für die LCD Ansteuerung hab ich mir ja auch nur ein paar "Einfache"
> Funktionen gebastelt um das LCD zu bedienen.
>
> Aber ich denke da manchmal so an die Richtung VBA,
>
> wenn da ne Zelle Rot sein soll, dann sag ich Zelle sei rot
>
> cells(1,1).interior.colorindex= 4
>
> (weiß noch nicht mal ob das gerade stimmt :) )
>
> die ersten Zeilen beim Pic gehen ja auch erstmal ans initalisieren
> verloren, ok wenn man es reicht ja strg+c und strg+v und der aufwand ist
> gleich Null.

Was meinst du jetzt mit Initialisieren? Das generelle Initialisieren des 
µC beim Startup oder das sich wiederholende Initialisieren beim Zugriff 
auf externe Elemente mit komplexer Befehlsfolge?

Für das erstere, KLAR! Das ist nun einmal da. Bei den 32Bittern noch 
deutlich Umfangreicher benötigt. Aber das geschieht beim PC (oder µC mit 
Linux) ja auch, da bemerkst du es im Idealfall halt nicht weil es da das 
Betriebssystem macht! (Aber wehe du hast keinen passenden Treiber und 
musst den erst einmal selbst schreiben...)

Ich habe mir mittlerweile für jeden µC Typ den ich jemals bearbeitet 
habe ein "Startfile" als Blankofile erstellt in dem die Fuses alle 
gesetzt werden, die IRQ Sprungziele definiert sind und ein unterprogramm 
Init vehanden ist, das aus main{} dann als erstes mit Init(); aufgerufen 
wird.
Wenn ich ein neues Projekt starte nehme ich diese Files immer als 
Ausgangspunkt, benenne dann eine Kopie auf den Projektnamen um und los 
gehts. NAtürlich habe ich auch Abweichende Einstellungen, aber dann 
brauche ich nur diesen Punkt ändern...
Ist im Prinzip aber auch nur die Bequemere VErsion von Copy&Paste.

Wenn du die jeweilige Einleitung des Zugriffes auf Komponennten wie 
Displays meinst, dann bist du mit den Selbstgeschriebenen Routinen schon 
auf dem richtigen Weg, musst die nur erweitern.
Als nächstes Schreibst du dann halt eine Routine für jedes Objekt 
welches du häufiger erstellen willst eine Routine die dir dieses 
Zeichnet. Wenn es zum Beispiel eine Tabellenzelle ist, dann kann man das 
durchaus so machen das man entweder die 4 eckkoordinaten oder eine 
Eckkordinate als Größe erstellt. Erstellt man dies dann auch noch so das 
die einzelnen Zellen in einem mindestns 2Dimensionalen Array abgelegt 
kann man später durch Index darauf zugreifen und z.B. eine Funktion 
schreiben die dann ähnlich wie in deinem VBA Beispiel beispielsweise an 
jeder Stelle im Programm mit einem Simplen DisplayOut(Anzeigestelle, 
Farbe); die Farbe Beliebig ändern kann.

ALLERDINGS: Bei "echten" Grafikdisplays, insbesondere mehrfarbigen, wo 
dann auch wirklich Grafikelemente die später noch bearbeitet und 
weiterhin als Einzelne elemente Adressierbar bleiben sollen ist der 
Aufwand schon sehr hoch den man "treiben" muss bevor man die eigendliche 
Anwendug schreibt. Allerdings bieten mittlerweile einige Anbiebter 
selbst spezielle Librarys zur Verfügung die man einbinden kann. Im Fall 
von Microchip PIC macht das Microchip selber und das auch kostenlos:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en543091
HAt man solche Libs zur Verfügung reduziert sich der Aufwand natürlich 
Enorm und man kann nahezu direkt mit der Applikation starten.
Natürlich sollte hier nicht vergessen werde zu erwähnen das solche 
Grafikdinge für einen 8Bit µC teilweise schon wirklich eine Aufgabe 
sind. Simples Pixelweises Bildermalen mag noch drinn sein, komplexe 
Grafik ist aber nicht mehr effizient möglich. (Deshalb ist die MC Lib 
auch erst ab PIC24.) Vorteil bei den PICs hier, ist das man ja beliebig 
für solche Anwendungen dann den "großen" nehmen kann und beim nächsten 
mal für eine Modellbaublinklichtanwendung IM Modell mit der selben 
Ausrüstung dann den PIC10 und für die Steuerung der Weichen über usb 
dann wieder den PIC18. Bei PIC muss man sich deswegen GERADE NICHT auf 
eine Architektur festlegen. Für die ersten Schritte: JA-macht Sinn, 
sobald man es aber beherscht und Effektiv Anwendungen programmieren will 
kann man beliebig von PIC10 über Pic24/dSPIC bis zu PIC32 jeweils den 
passenden auswählen.

> Deswegen ja die Idee/Frage, was tun, damit man eine blinkende LED sieht.
Für die 8Bitter hast du ja jetzt schon Beispiele bekommen. Bei den 
32Bittern OHNE Betriebssystem ist das ähnlich. Im Detail unterscheiden 
sich die Befehle manchmal etwas, aber vom Initvorgang abgesehen ist der 
Aufwand gleich.

Bei Systemen mit Betriebssystem wie ARM9 mit LINUX hast du nicht mehr 
Zwangsläufig den direkten Zugriff auf die Hardware zu regeln. Das 
Arbeiten ist mit dem Programmieren eines PCs schon recht vergleichbar.

Ich finde ein gutes (Gedanken-)Experiment ist folgendes:
Will man wissen wie es ist, dann besorge man sich einen Älteren 
funktionsfähigen PC mit mehreren Parallelen Schnittstellen (LPT) und 
einer NEtzwerkkarte. Auf diesem PC wird nun Linux Installiert, danach 
Monitor und Tastatur abgebaut. Sämtlicher Zugriff erfolgt nun nur noch 
über Netzwerk. DAS IST DANN DEIN ENTWICKLUNGSSYSTEM.
Jetzt kannst du mit einem "normalen" Compiler der in der LAge ist 
Linuxverständliche Binaries zu generieren deine Software als Schreiben 
und die kompilierten Programme auf den "RemotePC" schreiben. Willst du 
z.B. eine LED Bliken lassen müsstest du in C eine Anwendung schreiben 
die wie beim normalen PC auch immer eine Leitung ON/OFF setzt. (Beim 
"echten" LinuxµC ist das natürlich kein LPT und ein Treiber für direkten 
IO Zugriff ist meist dabei). Will man dann z.B. ein Modem oder eine 
Soundkarte anschließen installiert man zusätzlich den Treiber dafür, hat 
man keinen muss man einen Programmieren.
In dieser Konfiguration hat man also mit der HArdware im 
Anwendungsprogramm nur noch wenig zu tun, das System hat schon deutliche 
Ähnlichkeit mit einem richtigen "Computer"

Einen großen Vorteil hat man durch das Betriebssystem wenn man über 
wirklich Leistungsfähige Hardware verfügt und in Richtung Multitasking 
oder ähnliches gehen Will.
Hinsichtlich des Zugriffes auf externe/interne HArdware kommt es dann 
sehr darauf an ob passende Treiber verfügbar sind. Hat man zugriff auf 
für seine Hardware passende Treiber so muss dieser beim Start des 
Betriebssystems eingebunden werden und innerhalb der Anwendung braucht 
man dann nur noch auf die durch den Treiber bereitgestellte 
Schnittstelle zugreifen. Hat man keinen Treiber, so muss man erst einen 
selbst schreiben, der dann aber im gegensatz zur Version ohne BS sowohl 
die Richtige Kommunikation mit der Hardware ALS AUCH den Anforderungen 
des Betriebssystems gerecht werden muss.

Letzten endes ist, wenn man es genau betrachtet, der HArdwarezugriff 
also nicht einmal einfacher. Der Unterschied ist nur wo die 
Unterstützenden Dateien eingebunden werdem. Bei Linuxsystemen ins 
Betriebssystem, bei Controllern ohne BS ist es halt die Lib die direkt 
als Include in den Programmcode eingebettet wird.
Das was manche meinen ist einfach nur das mittlerweile in den 
Linuxversionen für Controller von Haus aus viele Treiber eingebunden 
sind, wohingegen man sonst zumindest noch die datei einmal aktiv ins C 
Projekt aufnehmen muss.

Diese Systeme haben DEFINITIV Ihre Berechtiung, keine Frage. Wenn man 
immer mehr Leistung braucht kommt irgendwann der Punkt an dem man nicht 
mehr drumherum kommt. Allerdings hat das nun nicht mehr viel mit der µC 
Programmierung zu tun an die der Großteil hier bei Nennung der Tätigkeit 
denkt. Die Programmierung am PC ist schon deutlich ähnlicher.

Dazu kommt dann noch das wie oben angedeutet das auch keine µC Systeme 
im engsten Wortsinn mehr sind, da mindestens der Speicher extern sein 
muss. Durch die Layoutvorgaben beim Anschluss des Speichers und alleine 
schon durch die Gehäuseformen/PinCount der Bausteine selbst ist auch der 
Selbstbau alles andere als Einfach. Er werden einige Anforderungen ans 
LAyout gestellt, Lochraster, fliegende Verdrahtung oder gar Breedboard 
sind völlig Unvorstellbar. Bei einigen Bausteinen ist zudem 4Layer oder 
gar 6Layer Layout Pflicht. Für erste Schritte ist allemal ein Fertiges 
Dev.Board angesagt, evtl. geht auch ein "Zweckemdfremdetes" 
Industrieprodukt wie die Seagate Dockstar oder zum Beispiel einige 
Oszilloskope.
Für spätere Einzelentwicklungen ist es dann teilweise deutlich billiger 
ein fertiges Prozessormodul zu kaufen als sich eine 4Layer Platine 
fertigen zu lassen. Dafür bekommt man schon locker mal 10 "normale" µC!

Wo die 32Bit µC wie PIC32 oder CortexM3 für Schritte wie LED Blinken 
schon die "Kanonen" bei der Spatzenjagt" sind, da stellen Linux 
basierende Entwicklungssysteme dann den Father of all Bombs (FAOB / 
größte thermobare Bombe) dar.
Solange keine Videobearbeitung, größere Grafikbearbeitung oder 
umfangreiche Signalanalyse geplant ist würde ich ohne andere besondere 
Anforderungen (wie Multitasking) daran keinen GEdanken verschwenden. Als 
Hobbybastler der nur ein wenig mehr in die Welt der Mikrocontroller 
eintauchen will schon gar nicht!

Gerade als solcher ist man mit den AVR oder PIC Mikrocontrollern schon 
recht gut bedient. Wobei ich halt die "zentrale" Bereitstellung von Libs 
durch den Hersteller wie bei Microchip gegenüber der dezentralen durch 
viele verschiedene Hobbynutzer eindeutig bevorzuge. Aber das ist 
Geschmackssache.
Es hat halt für mich den Vorteil eines immer recht einheitlichen Aufbaus 
und einer immer gleichen Rechtslage bei VErwendung, sowohl als reine 
Bastellei wie auch in komerziellen Produkten. (als reiner Bastler für 
Eigenbedarf ist zumindest die Lizenzfrage aber sowieso recht 
uninteressant, das gestattet wohl so gut wie jeder der seine Libs online 
stellt kostenlos)
Und halt das, was ich als weiteren Vorteil sehe, ich mit derselben recht 
kostengünstigen Hardware sowie dem KOMPLETT vom HErsteller 
bereitgestellten Softwarepaket für Windows UND Linux ALLE Familien von 
8Bit bis 32Bit problemlos ohne Zusatzaufwand je nach Bedarf bearbeiten 
kann. Aber auch das ist eine rine Geschmacksfrage!

Gruß
Carsten

von W.S. (Gast)


Lesenswert?

Einsteiger mit Pause schrieb:
> Nun zu meiner Frage:
> Hab irgendwo gelesen, dass sich die PIC 32 "angenehmer" programmieren
> lassen.

Das halte ich für eine dreiste Lüge. Guck dir mal ein Stück 
MIPS-Assemblerprogramm an und du wirst dich nach deinem PI18 sehnen.

Ja, für Leute, die immer nur in C programmieren und für die 
Hardwarezugriffe eine Treiberlib voraussetzen, ist das alles sicherlich 
völlig egal, aber das nur am Rande.

Wenn du mal vorab die Nase in eine MIPS-Maschine stecken willst, dann 
lies mal das: 
Beitrag "Pollin MOTOROLA VIP1710"
oder das: Beitrag "Pollin - Receiver-Mainboard mit Twin DVB-[T,C] Tuner, NXP PNX8950EH"
Sind beides MIPS-Maschinen, beide mit nem Teil-Betriebssystem drauf und 
beideeklig, wenn man tatsächlich in den Gedärmen wühlen muß.

W.S.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.