Pic12f683 statt Arduino Nano verwenden

OP #7515188
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) {

1
incomingByte = Serial.read();
2

3
if (incomingByte == '1')
4
{
5
  digitalWrite(ledPin1, HIGH);
6
} 
7

8
 if (incomingByte == '2')
9
{
10
  digitalWrite(ledPin2, HIGH);
11
} 
12
  if (incomingByte == '3')
13
{
14
  digitalWrite(ledPin3, HIGH);
15
 } 
16
 if (incomingByte == '4')
17
{
18
  digitalWrite(ledPin4, HIGH);
19
  } 
20

21
if (incomingByte == '0')
22
{
23
  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

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

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

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

14
        if (receivedByte == '1') {
15
            ledPin1 = 1; // LED 1 einschalten
16
        } else if (receivedByte == '2') {
17
            ledPin2 = 1; // LED 2 einschalten
18
        } else if (receivedByte == '3') {
19
            ledPin3 = 1; // LED 3 einschalten
20
        } else if (receivedByte == '4') {
21
            ledPin4 = 1; // LED 4 einschalten
22
        } else if (receivedByte == '0') {
23
            // Alle LEDs ausschalten
24
            ledPin1 = 0;
25
            ledPin2 = 0;
26
            ledPin3 = 0;
27
            ledPin4 = 0;
28
        }
29

30
        // Zurückmelden, ob die LED eingeschaltet oder ausgeschaltet ist
31
        if (ledPin1 == 1) {
32
            TXREG = '1';
33
        } else {
34
            TXREG = '0';
35
        }
36

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

}

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

macht das ganze eigentlich Sinn?

#7515225
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.

#7515972
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.

#7517344
Lesenswert?

Ein

12F683 hat 8 Beine.

aber keinen HW-UART.

Zugriffe darauf:

1
// UART-Einstellungen (9600 Baud, 8-Bit-Daten, keine Parität)
2
BRGH = 1;            // Hochgeschwindigkeitsmodus aktivieren
3
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.

#7517486
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren