Forum: Mikrocontroller und Digitale Elektronik Taster speziellen Porteingang zuweisen!


von Andreas V. (wicky)


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

von Michael U. (amiga)


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

von Andreas V. (wicky)


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

von Mmmh (Gast)


Lesenswert?

>>> Wo bekommt AVR mit 1,6GHz Takt?

>Sorry, wie meinst Du das ?
Na wie soll er das schon meinen?

???????????????????? >>>>>>>>>>>>>>>>>>>>>> #define F_CPU 1600000000UL 
<<<<<<<<<<<<<< ????????????????????

von Simon K. (simon) Benutzerseite


Lesenswert?

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
> <<<<<<<<<<<<<< ????????????????????

Was auch immer du nimmst, probier mal weniger davon.

von Mmmh (Gast)


Lesenswert?

Siehst Du? Sogar Simon K. hat es erkannt.

von Ben _. (burning_silicon)


Lesenswert?

booo AVR mit 1,6ghz will ich auch :)

von Edi R. (edi_r)


Lesenswert?

Andreas V. schrieb:
> ich habe versucht einen Taster (S0) einem separaten Porteingang (PA7)
> zuzuordnen.

Mir ist immer noch nicht klar, was Du eigentlich erreichen willst. 
Kannst Du das nochmal genau beschreiben?

von Spekulator (Gast)


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

von Ben _. (burning_silicon)


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... ;)

von Oliver H. (olli_henri)


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

von Andreas V. (wicky)


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

von Oliver H. (olli_henri)


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

von Andreas V. (wicky)


Lesenswert?

@ olli_henri

Danke für deine nette Unterstützung, werde deine Ratschläge bei der 
Umsetzung berücksichtigen.

noch einen schönen Abend

Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.