Forum: Mikrocontroller und Digitale Elektronik 2313 PortA2 und PORTB DEFECT


von Gerd A. (inputsammler)


Lesenswert?

Hallo
Ich bekomme mein Projekt nicht zum Laufen in der Sim gehts eigentlich.
Mit dem STK500 ist PortA nicht PortA am STK sondern Bei PortE Pin 7 und 
8 wahrscheinlich weil das die Funktionen sind.. aber egal.

Nun einige Fragen
1. PA2 funktioniert nur wenn man bei fuses Reset deaktiviert. Aber 
sobald mann das macht kann man doch icht mehr über SPI flashen oder
2. Warum ist bei PortA0 die Spannungsflanken kleiner als bei den 
anderen?
3. Mit dem Code unten müssten doch alle Ports schalten. Port 
PB1,PB2,PB3PB5,PB6 und PB7 funktionieren nicht. kann das sein das mein 
2313 defect ist. oder habe ich was falsch gemacht.

Fuses
high 0xDB
low  0xC2


Nun habe ich mir einen 2313 Porttest Code
1
#include <avr/io.h>
2
#include <stdint.h>
3
#define nop() asm volatile ("nop")  //nop - do nothing...just for the wait function
4
5
void wait(unsigned int a)  //a perfect waste of time
6
{              
7
  unsigned int b,c;
8
  for(b=0;b!= a; b++)for(c=0;c!= 10;c++) nop(); //do alot of nothing
9
  return;
10
}
11
12
int main(void)
13
{
14
  
15
  wait(10000);  //wait a while for power up
16
17
  DDRA = 0b111,    //OUTA; // Alles auf ausgang stellen hat nur PA0-PA2
18
  DDRB = 0x11111111;  //OUTB; Alles auf ausgang stellen hat PB0-PB7
19
  DDRD = 0b1111111;  // OUTD; Alles auf ausgang stellen hat nur PD0-PD6
20
21
//PA0 PA1 ist funktion XT1 und XT2
22
//PA2 ist RESET aber nicht disable bei den FUSES deswegen O.F.?
23
24
  while(1)
25
    {
26
    wait(10000);
27
    PORTA |= (1<<PA0) | (1<<PA1) | (1<<PA2);
28
    PORTB |= (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6)| (1<<PB7);
29
    PORTD |= (1<<PD0) | (1<<PD1) | (1<<PD2)| (1<<PD3) | (1<<PD4) | (1<<PD5) | (1<<PD6);
30
    
31
    wait(10000);
32
    PORTA &= ~((1<<PA0) | (1<<PA1) | (1<<PA2));
33
    PORTB &= ~((1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6)| (1<<PB7));
34
    PORTD &= ~((1<<PD0) | (1<<PD1) | (1<<PD2)| (1<<PD3) | (1<<PD4) | (1<<PD5) | (1<<PD6));
35
36
    }
37
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Was schreibt denn Atmel zu der maximalen Stromaufnahme/Stromabgabe des 
ganzen Attiny2313 und was saugst du während wait(10000) bei HIGH an 16 
Pins raus? Wurde oder wird der AVR warm?

Wie stabil ist deine Spannungsversorgung? Schafft die den Strom bei Vcc 
oder geht die Spannung Vcc in die Knie? Unter den Wert, der als 
Brownout-Level im Attiny2313 eingestellt ist (4,3V), so dass der AVR in 
den RESET-Zustand geht?

> Nun einige Fragen
> 1. PA2 funktioniert nur wenn man bei fuses Reset deaktiviert. Aber
> sobald mann das macht kann man doch icht mehr über SPI flashen
>
> Fuses
> high 0xDB
> low  0xC2

Ja. RSTDISBL ist somit programmiert, d.h. Frage 1 mit der 
ISP-Programmierung hat sich erledigt. Du kommst nur noch per 
HV-Programming an diesen AVR ran.

> 2. Warum ist bei PortA0 die Spannungsflanken kleiner als bei den
> anderen?

Ich kann es mangels Schaltplan nur vermuten: Vielleicht ist irgendwas an 
PortA0 angeschlossen?

> 3. Mit dem Code unten müssten doch alle Ports schalten. Port
> PB1,PB2,PB3PB5,PB6 und PB7 funktionieren nicht. kann das sein das mein
> 2313 defect ist. oder habe ich was falsch gemacht.

Ich kann es mangels Schaltplan nur vermuten: Vielleicht ist irgendwas an 
PB1,PB2,PB3,PB5,PB6 und PB7 angeschlossen?

von Gerd A. (inputsammler)


Lesenswert?

Danke für deine Antwort.
Ich habe den 2313 aus der Schaltung genommen un auf meinen STK gesetzt 
und den TEST code von oben benutzt.
Am Ausgang sind die LED von STK jeweils nur max 8 Stück.. Dadurch darf 
er eigentlich nicht kaputt gehen.
Anschließend ohen LED nur mit OSZI gemessen.
Kein Rechtecksigmnal an PB1,PB2,PB3PB5,PB6 und PB7 und PA2

An PA0 ist Rechteckspannung nicht so hoch wie bei den funktionierenden.


Stefan B. wrote:
> Was schreibt denn Atmel zu der maximalen Stromaufnahme/Stromabgabe des
> ganzen Attiny2313 und was saugst du während wait(10000) bei HIGH an 16
> Pins raus? Wurde oder wird der AVR warm?
Nein eigentlich nicht in der Schaltung aund auf dem STK
In der Schaltung werden die LED mir Vorwiderstand betriebnen.
Relais werden über einen uln2803AG angesteuert


> Wie stabil ist deine Spannungsversorgung? Schafft die den Strom bei Vcc
> oder geht die Spannung Vcc in die Knie? Unter den Wert, der als
> Brownout-Level im Attiny2313 eingestellt ist (4,3V), so dass der AVR in
> den RESET-Zustand geht?

Spanung ist 5V und bricht nicht ein (nachgemessen in der Schaltung)
Und auf den STK500 4,5V
Brownout-Level habe ich auf 2,7

> Ja. RSTDISBL ist somit programmiert, d.h. Frage 1 mit der
> ISP-Programmierung hat sich erledigt. Du kommst nur noch per
> HV-Programming an diesen AVR ran.
>

So sehen bei mir die FUSES aus. Also kann i9ch den PORTA2 nie VERWENDEN 
wenn ich SPI machen will.
Für was gehört eigentlich selfprgen ?

>> 2. Warum ist bei PortA0 die Spannungsflanken kleiner als bei den
>> anderen?
>
> Ich kann es mangels Schaltplan nur vermuten: Vielleicht ist irgendwas an
> PortA0 angeschlossen?
>
Leider nur eine LED oder OSZI

>> 3. Mit dem Code unten müssten doch alle Ports schalten. Port
>> PB1,PB2,PB3PB5,PB6 und PB7 funktionieren nicht. kann das sein das mein
>> 2313 defect ist. oder habe ich was falsch gemacht.
>
> Ich kann es mangels Schaltplan nur vermuten: Vielleicht ist irgendwas an
> PB1,PB2,PB3,PB5,PB6 und PB7 angeschlossen?
1
An der Orginal Schaltung ist an 
2
/*
3
Port  pin  E/A  Funktion
4
5
PA0   5  A  LED rot
6
PA1   4  A  LED gruen
7
PA2   1  A  LED blau 
8
9
PB0  12  E  0 Taster
10
PB1  13  E  1 Taster
11
PB2  14  E  2
12
PB3  15  E  3
13
PB4  16  E  4
14
PB5  17  E  5
15
PB6  18  E  6
16
PB7  19  E  7
17
18
PD0   2  E  8
19
PD1   3  E  9
20
PD2   6  E  *
21
PD3   7  E  #
22
PD4   8  A  Garage Gaby
23
PD5   9  A  Garage Gerd
24
PD6  11  A  Alarm
25
26
*/

von Pat (Gast)


Lesenswert?

Moin,

Ich kenne mich jetzt mit C nicht sonderlich aus aber muss bei dem "DDRB 
= 0x11111111" denn nicht eigendlich ein "0b11111111", bei dir ists nen 
0x...

Gruß
Pat

von Marvin M. (Gast)


Lesenswert?

Autsch. Das hab ich auch nicht gesehen... ;-)

@Gerd: Hast Du schonmal darüber nachgedacht, die Tastatur per 
Multiplexing abzufragen? Dann hättest Du etwas mehr Reserve... Den Reset 
sollte man sich nur dann wegdefinieren, wenn es absolut nicht mehr 
anders geht.
Andere Alternativen: Port-Erweiterungen über SPI oder I²C

von Gerd A. (inputsammler)


Lesenswert?

Also Vielen Dank für die Infos.

Der Code war nur zum Testen der Ports geschrieben. Nicht für das Projekt
Ja das heißt 0b11111111.

Ja das ist nicht gut das ich defekt mit c geschrieben habe aber ich war 
so vertieft in "C" das ich es sogar schrieb.

Bin gerade dabei die Tastertur mit AD einzulesen.
http://www.elektronik-projekt.de/thread.php?threadid=4030

Bin nicht 100% fit in C. Wie soll ich das angehen das Multiplexen.
Über einen Externen Baustein ?

Gruß Gerd

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Gerd A. wrote:

> Bin nicht 100% fit in C. Wie soll ich das angehen das Multiplexen.
> Über einen Externen Baustein ?

Als Einstieg so wie im AVR Tutorial in den Abschnitten zum Multplexen 
und zu den Schieberegistern, vielleicht.

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.