Forum: Mikrocontroller und Digitale Elektronik atmega8 hoher ausgangswiderstand


von Günda (Gast)


Lesenswert?

ich versuche jetzt schon seit einer gefühlten ewigkeit erfolglos mit 
einem Atmega8 einen 8bit dac zu steuern. der aufbau: am port D meines 
atemega 8-16pu hängt ein pm7528 8 bit dac. die steuerpins sind mit pin 
3,4 und 5 am C-port. aufgebaut habe ich alles mit samt dem 16mhz quarz 
und hünerfutter auf dem steckbrett. zum ablauf: der atmega sendet im 
10ms bereich jeweils den wert 0 und 255, also alles 1, alles 0. zum 
problem: die am dac ausgegebene spannung beträrt konstant 100%. wen ich 
nun alerdings zum testen den taste des oszis an einen der dateneingänge 
halte begint die ausgangsspannung mit genau der amplitude des zu 
testenden eingangs zu schwingen. ich vermutete, dass der atmega nicht 
richtig auf low schaltet, und sobalt ich das oszi anschliese es mit 
seinem 1(megaohm) als puldown wirkt und deshab das ganse funktioniert. 
besterkt wurde diese these damit, dass wen ich den die die daten und 
steuerleitungen manuell von 1 auf 0 schalte (also die kabel umstecke)die 
ausgangsspannung nach dem eingestelten wert richtet und sich mit 
writeenable auf low "einfrieren" läst. also habe ich kurzterhand 
10(kiloohm) widerstände als pulldown an die daten und steuerleitungen 
montiert. am ausgang gemessen: konstant 0V. oszi wieder an 
datenleitungen dran und sihe da: spannung auf 1V gesunken! nun stellt 
sich mir die frage: warum sinkt die spannung so stark ab? es fliesen ja 
nur 0,5mA über die wiederstände. habe ich irgend etwas falsch 
programiert, oder haben atmegas seit neuestem wirklich so einen hohen 
innenwiderstang. früher haben wir ja leds mit 50 und mer mA 
angeschlossen, und es hat wunderbar funktioniert. oder habe ich gar 
einen defekten prozessor. an der spannungsversorgung kann es übrigens 
nicht liegen, die liefert locker 20A.

von Max H. (hartl192)


Lesenswert?

Kann es sein, dass du den Pin als Eingang konfiguriert hast und nur den 
internen Pullup ein- und ausschaltest?

Zeig und mal Schaltplan und Code.


PS: Wenn man die Shift-Taste gedrückt hält während man einen Buchstaben 
antippt kann man Großbuchstaben schreiben.

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Meine Glaskugel zeigt ja so was von Nebel an...

Infrage kommt ein Fehler in Zeile 42 Deines Programmes,

die Fuses sind konfus,

oder Pin X hängt in der Luft.

von spess53 (Gast)


Lesenswert?

Hi

Wichtige Regeln

   - Groß- und Kleinschreibung verwenden!

MfG spess

von MaWin (Gast)


Lesenswert?

Günda schrieb:
> früher haben wir ja leds mit 50 und mer mA angeschlossen, und es hat
> wunderbar funktioniert.

Wer meint, auf Datenblätter scheissen zu können, darf sich nicht 
wundern, wenn die Chips nicht mehr mitspielen.

Ich weiss zwar nicht, warum es bei dir nicht funktioniert, von 
nicht-verstandenem 7528 der über VRef seine Spannung ausgibt und über 
OUT1 die Referenzspannung empfangen will, über hochohmige Verbindungen 
auf dem Steckbrett inklusive weggelassenen Stützkondensatoren und 
defektem uC ist alles möglich,

aber ich weiss, dass es an deiner unaufmerksamen Scheiss auf Datenblatt 
und Verständnis- Haltung liegt.

von Günda (Gast)


Angehängte Dateien:

Lesenswert?

Max H. schrieb:

> Kann es sein, dass du den Pin als Eingang konfiguriert hast und nur den
> internen Pullup ein- und ausschaltest?

habe auch schon versucht


MaWin schrieb:

> hochohmige Verbindungen auf dem Steckbrett
habe alle durchgemesse, alle unter 1(Ohm)

> inklusive weggelassenen Stützkondensatoren
Sind vorhanden


Max H. schrieb:
> Zeig und mal Schaltplan und Code.

der code:
1
#define F_CPU 16000000
2
#include <avr/io.h>
3
#include <util/delay.h>
4
#include "deprecated.h"
5
#define DATEN_PORT PORTD  // Datenport D0-D7
6
#define STEUERUNG_PORT PORTB  //Steuerungs Port
7
#define A_B_BIT 0  //DACA/DACB Bit
8
#define WRITEENABLE_BIT 8 //Write Enable Bit
9
#define CHIPSELECT_BIT 2  // Chip Select Bit
10
11
12
int main(void)
13
{
14
    while(1)
15
  
16
    {
17
    
18
    cbi(STEUERUNG_PORT,A_B_BIT); // DACA/DACB Bit low für DACA
19
    DATEN_PORT=255; //Daten senden
20
    cbi(STEUERUNG_PORT,WRITEENABLE_BIT); // WE Steuerungsport auf low um DAC auf daten empfangen zu schalten
21
    cbi(STEUERUNG_PORT,CHIPSELECT_BIT); // CS Steuerungsport auf low um DAC auszuwählen
22
    _delay_ms(1); // verzögerung, das obrige befehe ausgeführt werden können
23
    sbi(STEUERUNG_PORT,WRITEENABLE_BIT); // WE Steuerungsport auf high um DAC auf daten ausgeben zu schalten
24
    sbi(STEUERUNG_PORT,CHIPSELECT_BIT); // CS Steuerungsport auf high um DAC abzuwählen
25
          _delay_ms(10); // verzögerung
26
    cbi(STEUERUNG_PORT,A_B_BIT); // DACA/DACB Bit low für DACA
27
    DATEN_PORT=0; //Daten senden
28
    cbi(STEUERUNG_PORT,WRITEENABLE_BIT); // WE Steuerungsport auf low um DAC auf daten empfangen zu schalten
29
    cbi(STEUERUNG_PORT,CHIPSELECT_BIT); // CS Steuerungsport auf low um DAC auszuwählen
30
    _delay_ms(1); // verzögerung, das obrige befehe ausgeführt werden können
31
    sbi(STEUERUNG_PORT,WRITEENABLE_BIT); // WE Steuerungsport auf high um DAC auf daten ausgeben zu schalten
32
    sbi(STEUERUNG_PORT,CHIPSELECT_BIT); // CS Steuerungsport auf high um DAC abzuwählen
33
    _delay_ms(10); // verzögerung
34
     }
35
}
 (ich weiß, das es nicht der beste code ist, aber mir viel auf die 
schnelle nichts anderes ein. fals jemand einen besseren vorschlag hat 
würde ich mich darüber sehr freuen)

Schaltplan im anhang

von Max H. (hartl192)


Lesenswert?

Wenn ich es nicht übersehen habe, rührst du die DDRx Register in deinem 
Code gar nicht an. Alle IOs sind nach dem Reset Eingänge.

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hallo,

ja wie vermutet, werden keine Ausgänge definiert, nur der Pullup ein und 
ausgeschaltet !

von Karl M. (Gast)


Lesenswert?

@Günda,

und wie heißt es so schön RTF !

Erst alle wild machen, und dann selbst von der Materie keine Ahnung 
haben.

von Michael B. (laberkopp)


Lesenswert?

Günda schrieb:
> Unbenannt.png

Also im Datenblatt steht für 5V VDD:
OUTA or OUTB at 2.5V
und das wird seinen Grund haben.

Max H. schrieb:
> Wenn ich es nicht übersehen habe, rührst du die DDRx Register in deinem
> Code gar nicht an. Alle IOs sind nach dem Reset Eingänge.

So ist es.

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.