AVR ATtiny84 Ausgänge schalten ArduinoISP PORTx statt digitalWrite

#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
#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
}
#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

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