AVR ATtiny84 Ausgänge schalten ArduinoISP PORTx statt digitalWrite

OP #6782114
Lesenswert?
• ▲
▼
Hallo zusammen,

ich versuche gerade einen ATtiny 84 mit Platformio und einem Arduino als 
ISP zu programmieren. Ich habe hier das Problem die Ausgänge zu 
beschalten, in der Arduino-Schreibweise klappt es:
1
digitalWrite(1, HIGH);
2
digitalWrite(2, HIGH);
3
digitalWrite(3, HIGH);
4
delay(5000);
5

6
digitalWrite(1, LOW);
7
digitalWrite(2, LOW);
8
digitalWrite(3, LOW);
9
delay((5000);
10
...

  nun möchte ich das ganze etwas effizenter gestalten und habe das hier 
versucht:
1
 
2
DDRB |= (1 << DDB1);// PB01 als Ausgang setzen
3
DDRB |=(1 << DDB2); // PB02 als Ausgang setzen
4
DDRB |=(1 << DDB3); // PB03 als Ausgang setzen
5
DDRA |=(1 << DDA1); // PA1 als Ausgang setzen
6

7
PORTB |= (1 << PORTB1); // PB1 auf 1 setzen
8
PORTB |= (1 << PORTB2); // PB2 auf 1 setzen
9
PORTB |= (1 << PORTB3); // PB3 auf 1 setzen
10
PORTA |= (1 << PORTA1); // PA1 auf 1 setzen
11
delay(5000);
12

13
PORTB &= ~(1 << PORTB1); // PB1 auf 0 setzen
14
PORTB &= ~(1 << PORTB2); // PB2 auf 0 setzen
15
PORTB &= ~(1 << PORTB3); // PB3 auf 0 setzen
16
PORTA &= ~(1 << PORTA1); // PA1 auf 0 setzen
17
delay(5000);
PB01 und PB02 funktioniert noch, alles weitere funktioniert leider nicht 
:-( Die Ausgänge PB3 und PA1... verändern sich nicht (kein 1 Signal)

Wie kann ich die PINS 3 (PB1), 5 (PB2), 6 (PA7), 7 (PA6), 8 (PA5), 9 
(PA4), 10 (PA3), 11 (PA2), 12 (PA1), 13 (PA0) ansprechen und auf 1 und 0 
setzen, was mache ich falsch? Beim compilieren und flashen des ATtiny 
bekomme ich keine Fehlermeldung, das übertragen mit dem Arduino 
funktioniert.

Viele Grüße

Thomas
OP #6782317
Lesenswert?
• ▲
▼
Hallo EAF,

das stimmt PB3 ist der Reset-Pin, aber auch wenn ich den nicht beschalte 
(die Ausgänge einzeln probiere) funktioniert es leider nicht.

Wenn ich z.B. nur
1
 
2
DDRA |=(1 << DDA1); // PA1 als Ausgang setzen
3
PORTA |= (1 << PORTA1); // PA1 auf 1 setzen
4
delay(5000);
5
PORTA &= ~(1 << PORTA1); // PA1 auf 0 setzen
6
delay(5000);

setzte wird der Ausgang PA1 (PIN 12) nicht gesetzt.

Viele Grüße

Thomas
#6782374
Lesenswert?
• ▲
▼
Wie verhalten sich einzelne Pins, wenn der ganze Port ein/ausgeschaltet 
wird?
1
#define F_CPU 1000000UL
2
#include <avr/io.h>
3
#include <util/delay.h>
4

5
int main(void)
6
{
7
  DDRA = 0xFF;
8
  while (1)
9
  {
10
    PORTA = 0xFF;
11
    _delay_ms(1000);
12
    PORTA = 0;
13
    _delay_ms(1000);
14
  }
15
}
OP #6782759
Lesenswert?
• ▲
▼
Hallo Georg M.,

vielen Dank für Deinen Code, es funktioniert nun, ich hatte einen 
Denkfehler :-(
1
digitalWrite(3, HIGH);
benutzt den ATtiny Pin 6 (PA7), dieser muss dann natürlich auch richtig 
angesprochen werden:
1
 PORTA = 0x64;
2
\\ PORTA = 0b01000000;
ich bin vom ATtiny Pin 4 (PB3) ausgegangen, was falsch ist.

@Wolfgang: Vielen Dank für den Hinweis, das schaue ich mir auch mal an.

Viele Grüße und herzlichen Dank euch beiden

Thomas

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.