Forum: Mikrocontroller und Digitale Elektronik Pic12f683 statt Arduino Nano verwenden


von Siggi (siha49)


Lesenswert?

Hallo,
der Arduino Code:
#define ledPin1 2
#define ledPin2 3
#define ledPin3 4
#define ledPin4 5
int incomingByte;

void setup() {

  Serial.begin(9600);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {

    incomingByte = Serial.read();

    if (incomingByte == '1')
    {
      digitalWrite(ledPin1, HIGH);
    }

     if (incomingByte == '2')
    {
      digitalWrite(ledPin2, HIGH);
    }
      if (incomingByte == '3')
    {
      digitalWrite(ledPin3, HIGH);
     }
     if (incomingByte == '4')
    {
      digitalWrite(ledPin4, HIGH);
      }

    if (incomingByte == '0')
    {
      digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
     }


  }
}

und der Pic code:
#include <xc.h>

#define _XTAL_FREQ 4000000 // Annahme eines 4 MHz Quarzoszillators, kann 
angepasst werden

// Definieren der Pin-Nummern für die LEDs
#define ledPin1 GP0
#define ledPin2 GP1
#define ledPin3 GP4 // Verwenden Sie GP4 für ledPin3, da GP2 bereits für 
die UART-Kommunikation belegt ist
#define ledPin4 GP3

void main() {
    TRISIO = 0b00000000; // Alle GP-Pins als Ausgang konfigurieren
    GPIO = 0b00000000;   // Alle GP-Pins auf LOW setzen

    // UART-Konfiguration
    TRISIO2 = 1;         // GP2 (TX) als Eingang
    TRISIO5 = 0;         // GP5 (RX) als Ausgang
    ANSEL = 0;           // Alle analogen Funktionen deaktivieren

    // UART-Einstellungen (9600 Baud, 8-Bit-Daten, keine Parität)
    BRGH = 1;            // Hochgeschwindigkeitsmodus aktivieren
    SPBRG = 25;          // Baudraten-Register einstellen (entspricht 
9600 Baud)

    while (1) {
        if (RCIF) { // Überprüfen, ob Daten empfangen wurden
            char receivedByte = RCREG; // Empfangene Daten lesen

            if (receivedByte == '1') {
                ledPin1 = 1; // LED 1 einschalten
            } else if (receivedByte == '2') {
                ledPin2 = 1; // LED 2 einschalten
            } else if (receivedByte == '3') {
                ledPin3 = 1; // LED 3 einschalten
            } else if (receivedByte == '4') {
                ledPin4 = 1; // LED 4 einschalten
            } else if (receivedByte == '0') {
                // Alle LEDs ausschalten
                ledPin1 = 0;
                ledPin2 = 0;
                ledPin3 = 0;
                ledPin4 = 0;
            }

            // Zurückmelden, ob die LED eingeschaltet oder ausgeschaltet 
ist
            if (ledPin1 == 1) {
                TXREG = '1';
            } else {
                TXREG = '0';
            }

            // Warten, bis die UART-Übertragung abgeschlossen ist
            while (!TXIF);
        }
    }
}

beim Pic kommt noch der USB to TTL hinzu.
Pics und Adapter sind vorhanden.

macht das ganze eigentlich Sinn?

von Klaus (feelfree)


Lesenswert?

Siggi schrieb:
> macht das ganze eigentlich Sinn?

Nein, dein Beitrag macht ohne jeden Kontext überhaupt keinen Sinn.

von Rainer W. (rawi)


Lesenswert?

Siggi schrieb:
> Pic12f683 statt Arduino Nano verwenden

Du vergleichst Äpfel mit Birnen.
Der Pic12f683 ist ein Mikrocontroller, der Arduino Nano ist ein 
Controllerboard.

Wenn du den Arduino Code auf den PIC umsetzen willst, guckst du dir am 
besten auch die main() vom Arduino an.

> beim Pic kommt noch der USB to TTL hinzu.

Beim Arduino Nano ist der doch auch drauf.

> TRISIO = 0b00000000; // Alle GP-Pins als Ausgang konfigurieren

Mutig, mutig - je nach Hardware kann so etwas böse daneben gehen.
Ganz schlechte Angewohnheit.

Bist du sicher, dass deine unbekannte Library Zugriffe wie "ledPin1 = 1" 
als Bitzugriffe am GPIO umsetzt? Das würde mich wundern.
Hinter GP0 ... GP4 verbergen sich wahrscheinlich einfach nur Zahlen für 
Bit-Nummern.

: Bearbeitet durch User
von Siggi (siha49)


Lesenswert?

Es sollte nur aus Kostengründen 3 mal zum Einsatz kommen.
USB to TTL Adapter und Pics sind noch vorhanden.
3 Arduino Nano muss ich erst wieder kaufen.

von Rainer W. (rawi)


Lesenswert?

Siggi schrieb:
> 3 Arduino Nano muss ich erst wieder kaufen.

Die kosten als Nachbau pro Stück 6€ und sind in 3 Tagen da. Beim PIC 
brauchst du außerdem auch noch die Hardware um deine Bauteile zusammen 
zu bringen.
Wenn es dir nicht ein Herzensanliegen ist, das auf den PIC zu portieren, 
läuft das auf einen üblen Stundenlohn hinaus ;-)

p.s.
Die Sache mit den Bit-Field Zugriffen dürfte wohl funktionieren, auch 
wenn die Schreibweise arg kurz ist, so dass nicht sofort klar wird, was 
dahinter steckt.

: Bearbeitet durch User
von Michael O. (michael_o)


Lesenswert?

12F683 hat 8 Beine. 3Led + SIO ist Sportlich klein dafür das Kerlchen.

MfG
Michael

von Motopick (motopick)


Lesenswert?

Ein
> 12F683 hat 8 Beine.

aber keinen HW-UART.

Zugriffe darauf:
>     // UART-Einstellungen (9600 Baud, 8-Bit-Daten, keine Parität)
>     BRGH = 1;            // Hochgeschwindigkeitsmodus aktivieren
>     SPBRG = 25;          // Baudraten-Register einstellen (entspricht 9600 Baud)

sind daher recht sinnfrei.


> Die kosten als Nachbau pro Stück 6€

Ach doch schon so teuer.
Aber naja, wenn es jemand nicht schafft, selber einen Controller
auf eine Platine zu setzen, dann wird er wohl blechen muessen.

von Peter D. (peda)


Lesenswert?


von Motopick (motopick)


Lesenswert?

> Aber der ATtiny412 (0,66€)

Ganz schoen teuer fuer so einen Knirps.
Als 555-Ersatz waere mir das zu viel. Auch mit UART. :)
Wird der denn auch von der A*o-Umgebung bedient?

Ein 12F683 kann UART, und das erst recht bei langsamen
9600 bd in Software.

Aber mit "einfachem" Portieren wird das wohl nichts.
Man sollte gelegentlich auch mal einen Blick in die
Datenblaatter werfen.

Da wuerde man dann z.B. den 16F628 finden, der einen
HW-UART hat.

Edith:
Oder den 18F2550 mit USB...

: Bearbeitet durch User
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.