PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Pin-Programmierung mit Arduino



Moppi
26.09.2018, 07:10
Frage zur Programmierung verschiedener Kontroller-Beinchen, des Atmega328:

pinMode(0,INPUT); ist gleich pinMode(PD0,INPUT); ?
digitalRead(0); ist gleich digitalRead(PD0); ?
digitalWrite(0,HIGH); ist gleich digitalWrite(PD0,HIGH); ?

Analogeingänge:

analogRead(PC0); ist gleich analogRead(A0); ist gleich analogRead(14); ?

analogRead(PC0); ist gleich analogRead(A0); oder digitalRead(14); ?

digitalRead(14); ist gleich digitalRead(PC0); ?

RESET-Pin:

pinMode(PC6, INPUT_PULLUP);

Müsste den internen Pull-Up-Widerstand, am Reset-Pin einschalten. Die Arduino-IDE beschwert sich jedenfalls nicht, über diesen Ausdruck.
Falls das zum Erfolg führt, dann wäre der interne Widerstand aktiv. Wäre der Atmega328 dann noch mit einem Arduino Uno Rev3-Board programmierbar oder stört dann der interne Pull-Up?

MfG

HaWe
26.09.2018, 09:34
zu den low level Pin Nummern kann ich nichts sagen, aber für Arduino Code würde ich ime Sketch Immer die Arduino-Namen verwenden; eventuell externe Tabelle zum Abgleich, sonst ist der Code später nicht zu anderen Boards mit anderem Pin-Mapping kompatibel. Auch bei digitalem r/w auf den ADC Pins also immer die Ax-Nummern verwenden!

pinMode(nr, INPUT) schaltet alle Pins in Read-Modus (bei analogen = default)
pinMode(nr, INPUT_PULLUP) dto, schaltet bei allen den internen pullup dazu
pinMode(nr, OUTPUT) schaltet alle Pins in digital Write-Modus

digitalRead auf ADC Pins liest nur LOW/HIGH wie auf den digitalen,
analogRead auf den ADC Pins liest 10bit-ADC 0...1023
digitalWrite auf allen (auch ADC) pins schaltet nur LOW/HIGH
analogWrite auf digitalen Pins schaltet pwm (8bit 0...255, IIRC, CMIIW)

analogWrite auf ADC Pins weiß ich nicht, da sie weder DAC Pins sind (echte analog Spannung) noch unbedingt pwm können

Moppi
26.09.2018, 09:49
Wenn man die analogen Eingänge als digitale Ausgänge oder Eingänge schaltet, lassen die sich, digital, mit den Nummern 14 bis 19 ansprechen. Ich glaube, digitalWrite(A0); führt dann nicht zum Erfolg (?). Aber digitalRead und digitalWrite müsste dann auf PC0 bis PC5 anzuwenden sein und zum Erfolg führen? - Hmmm....

Ich denke ich probiers aus - Steckbrettstöpseln ist dann angesagt. :)

Aber RESET-Eingang, PC6 interessiert mich. Wenn ich den äußeren Widerstand spare und den internen Pull-Up einschalte, dann kann ich den womöglich nicht mehr einfach über das Arduino Uno-Board programmieren. Das kann ich nicht ausprobieren. Weil bei Misserfolg könnte ich auch keinen Bootlader draufspielen.

HaWe
26.09.2018, 09:52
doch, A0-A7 passt immer soweit ich weiß,
denn kein Arduinianer arbeitet normalerweise mit den analogen GPIO Pin Nummern, weil die von Board zu Board wechseln.
Sie funktionieren zwar hier vlt per 14-21, aber auf anderen Boards sind es dann vielleicht 54-61 oder so.
Also immer beim Ax Schema bleiben!

Moppi
26.09.2018, 09:56
Wenn man direkt nur mit dem reinen IC arbeitet, bin ich dafür die Pins nur mit PBx, PCx und PDx anzusprechen, weil diese Nummern von 0 bis 19 muss man sich immer erst dazudenken. Und A0 bis A5 auch.
Eigentlich müsste immer PCx, PBx und PDx funktionieren, egal ob analog oder digital Read bzw. Write.

Aber RESET-Eingang, PC6 interessiert mich. Wenn ich den äußeren Widerstand spare und den internen Pull-Up einschalte, dann kann ich den womöglich nicht mehr einfach über das Arduino Uno-Board programmieren. Das kann ich nicht ausprobieren. Weil bei Misserfolg könnte ich auch keinen Bootlader draufspielen.

HaWe
26.09.2018, 10:03
Der Reset Pin wird bei Arduino nicht programmiert soweit ich weiß, er führt automatisch einen Reset aus, wenn er auf GND verbunden wird.

- - - Aktualisiert - - -

es gibt aber offenbar doch einen Trick: https://forum.arduino.cc/index.php?topic=253419.msg1793593#msg1793593
The Reset pin can be used as a digital pin with a fuse change.

From the 328P datasheet:
1.1.5 PC6/RESET
If the RSTDISBL Fuse is programmed, PC6 is used as an I/O pin. Note that the electrical characteristics of PC6 differ from those of the other pins of Port C.
If the RSTDISBL Fuse is unprogrammed, PC6 is used as a Reset input. A low level on this pin for longer than the minimum pulse length will generate a Reset, even if the clock is not running. The minimum pulse length is given in Table 29-16 on page 312. Shorter pulses are not guaranteed to generate a Reset.

Do some reading, see if those characteristics work for you.
If you do not have Reset tho, you will not be able to download programs via the serial port.
I think programming can only be done via ICSP at that point. Under Memory Programming, no mention is made of whether programming still works if Reset Disable fuse is changed. Maybe being held low is recognized differently than just a low pulse.

Moppi
26.09.2018, 11:10
Ich wollte auch nur den äußeren Widerstand einsparen.

Hubert.G
26.09.2018, 18:33
Der interne PullUp Resistor ist am Reset immer aktiv. Hat laut Datenblatt einen Wert zwischen 30k und 60k.
Der Reset-Pin hat allerdings keine Schutzdioden, da sonst keine HV-Programmierung möglich wäre.
Wird der Reset-Pin, durch verändern der Fuses, als normaler I/O verwendet, ist nur mehr HV-Prog möglich.

Moppi
01.10.2018, 08:12
@Hubert.G

In Figure 15-1. - Reset Logic ist zumindest einer eingezeichnet. Allerdings sieht man ja bei externen Resettastern immer, dass da noch ein Widerstand von außen mit 10k gegen Vcc angeschlossen wird. Es ist ja auch nur die Rede davon, S. 74 - 15.4, dass man für einen externen Reset LOW-Signal anlegt. Das verwirrt mich, wozu dann noch ein externer Widerstand für'n Taster dazugepackt wird.

MfG

Hubert.G
01.10.2018, 09:31
Der externe Widerstand, von zumeist 10k, wird für ein besseres Resetverhalten dazugebaut.
Bei einer etwas längeren Resetleitung und unsauberer Umgebung, Motor, Relais, kann es sonst zu unerwünschten Einstreuungen kommen die ein Reset auslösen.
Der Widerstand ist also mehr Vorsichtsmaßnahme um eine Störungsquelle von vornherein auszuschließen.
Schau dir dazu die "AVR042: AVR Hardware Design Considerations" an, dort wird auf diverse Hardwarebeschaltungen hingewiesen.

Moppi
01.10.2018, 14:37
Ja, das war auch die einzige Erklärung, die ich dafür hatte.

MfG