Taster speziellen Porteingang zuweisen!

OP #1526268
Lesenswert?

Hallo,

ich habe versucht einen Taster (S0) einem separaten Porteingang (PA7) 
zuzuordnen.
Im endefekt habe ich es auch hinbekommen, aber ich vermute dies ist 
nicht der korrekte Weg!,
weil ich nun keinen anderen Taster mehr einem anderen Port zuordnen 
kann!

Könnte sich dies einmal jemand anschauen der schon tiefer in der Materie 
steckt als ich(Anfänger)!

Danke.

Ich arbeite mit einem STK 600, Atmel 2650, 16 MHZ;

Code:

#include<avr/io.h>


#ifndef F_CPU
#define F_CPU 1600000000UL
#endif

#include<util/delay.h>


uint8_t mask1;

void main(){

  DDRD = 0x00;
  DDRA = 0xFF;

  mask1 = 0x7F;

  while(1){

                if(PIND){
    PORTA = PIND<<7 | mask1;
    }
  }

}

Gruß,
Andreas
#1526325
Lesenswert?

Hallo,

Andreas V. schrieb:
> ich habe versucht einen Taster (S0) einem separaten Porteingang (PA7)
> zuzuordnen.
Das macht man üblicherweise, indem man den Taster an den gewünschten 
Portpin anlötet...

Deine Fragestellung ist mir also etwas unklar.

> #ifndef F_CPU
> #define F_CPU 1600000000UL
Wo bekommt AVR mit 1,6GHz Takt?

> #endif

Gruß aus Berlin
Michael
OP #1526374
Lesenswert?

Michael U. schrieb:
> Das macht man üblicherweise, indem man den Taster an den gewünschten
> Portpin anlötet...

Ich wollte es halt simulieren um eventuell für ein späteres Projekt mit 
einem Taster verschiedene Ereignisse an verschiedenen Pins des Ports 
auszulösen.

Michael U. schrieb:
> Wo bekommt AVR mit 1,6GHz Takt?

Sorry, wie meinst Du das ?

Habe gerde gesehen das ich im ersten post einen Zahlendreher habe.

Es handelt sich definitiv um einen ATmega 2560


Andreas
Gast #1526435
Lesenswert?

Blick in die Glaskugel Du willst also wenn du auf einen Taster 
drückst, der irgendwie angeschlossen ist an deinem µC, dass ein 
bestimmter Pin verschiedens tut? Also z.b. Einmal ne Software PWM 
ausgeben, beim nächsten Drücken nur auf High ziehen? soetwas?

Meine Glaskugel ist auf Grund der Witterungsverhältnisse grad nicht so 
gut zu gebrauchen, sorry ;)

Aber ich glaube wenn du uns nochmal genau sagst was du vor hast, wären 
wir einen großen Schritt weiter ...
#1526437
Lesenswert?

ich versteh auch nicht was er meint. diese zuweisung ist nur in hardware 
durch entsprechende verlötung zu machen. der µC kann doch nur 
mitbekommen, daß sich an einem seiner pins was ändert. wenn ich 
irgendein pin auf masse lege und der port des µC zeigt mir an, daß ein 
anderes pin auf masse liegen würde dann nehm ich den µC und schmeiß ihn 
weg... ;)
#1526444
Lesenswert?

Dieses Program ist für einen Mega 16 und ist eine Möglichkeit einen 
Taster abzufragen.

Deine Frequenz ist zu hoch eingestellt, so einen AVR gibts nicht!

/*
 * zeigt an der LED 0 den Zustand eines Tasters an PA0 an, der geöffnet 
über 10k an Masse liegt und geschlossen an Vcc
 * mit jedem Tastendruck wird ein Wanderbalken an LED 1-7 an PORTB 
weiterbewegt
 *
 *
 */

#include <avr/io.h>
#include <util/delay.h>    // definiert _delay_ms()


int main()
{
  DDRB = 0xFF;    // PORTB als Ausgang
  PORTB = 0;    // alles aus an PortB
  DDRA &= ~(1 << DDA0);  // PA0 als Eingang

  while (1)    // Endlos
  {
  if (PINA & (1 << PINA0))// wenn PA0 geschlossen (HIGH)
    PORTB |= (1 << PB7);  // PB7 LED anschalten
  else
    PORTB &= ~(1 << PB7);
  while (PINA & (1 << PINA0));// warten bis Taste los ist

  return 0;
}
OP #1526500
Lesenswert?

Oliver Henrichsen schrieb:
> Deine Frequenz ist zu hoch eingestellt, so einen AVR gibts nicht!

Das Datenblatt sagt:

ATmega2560/ATmega2561
0-16MHZ@4.5-5.5V

wenn ich das falsch interpretiert habe OK, bin halt noch nicht so 
sattelfest wie andere.

Mmmh schrieb:
>>>> Wo bekommt AVR mit 1,6GHz Takt?
>
>>Sorry, wie meinst Du das ?
> Na wie soll er das schon meinen?
>
> ???????????????????? >>>>>>>>>>>>>>>>>>>>>> #define F_CPU 1600000000UL
> <<<<<<<<<<<<<< ????????????????????

Die Definition für die Frequenz stamt von einem Code zur Ansteuerung 
eines LCD Displays.
Hätte ich rauslöschen sollen! wenn ich gewußt hätte was das auslöst.

Die Definition steht übrigens in der lcd-routines.h, gehört hier aber 
nicht hin, hab ich verstanden.

Spekulator schrieb:
> Aber ich glaube wenn du uns nochmal genau sagst was du vor hast, wären
> wir einen großen Schritt weiter ...

Ich wollte  versuchen einen Pegel an einem Pinx abzufragen und daraufhin 
einen Portx  zu setzen.

Andreas
#1526524
Lesenswert?

Na dann habe ich dich wohl richtig verstanden und wenn du den von mir 
geposteten Code portierst hast du einen guten Ansatz das umzusetzen was 
du möchtest.
Denke aber auch über das entprellen des Tasters nach sonst gehts nur 
sehr unzuverlässig.

Manche Kleinigkeiten lösen in so einem Forum eine menge Reaktionen 
aus...

LOL

:-))

Gruß Oliver

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