Pollin Controller Port Ausgang auf "high" schalten

Gast #2873871
hallo zusammen,

ich habe mir ein Microcontroller Port von Pollin bestellt was auch sehr 
gut funktioniert. Nun würde ich gerne die Ausgänge setzen wie im 
folgenden Beispiele gezeigt

#include <avr/io.h>

int main (void) {

   // PC0 als Ausgang setzen
   DDRC  = (1<<PC0);
   // PC0 auf 1 setzen
   PORTC |= ~(1<<PC0);
   // PC0 auf danach auf 0 setzen
   //PORTC |= (1<<PC0);

   while(1) {

   }
   return 0;

}

nun wollte ich den Port wie folgt setzen. allerdings wird der Port nie 
auf "1" gesetzt, kann mir jemand sagen was ich falsch mache?

vielen Dank
#2873880
1
 // PC0 auf 1 setzen
2
   PORTC |= ~(1<<PC0);
Hiermit werden alle Pins bis auf den P0 auf HIGH gesetzt, da sie 
allerdings als Eingang konfiguriert sind: Es werden die Pull-Ups 
eingeschaltet. (P0 bleibt null)
1
// PC0 auf danach auf 0 setzen
2
   //PORTC |= (1<<PC0);
Nöö, die Anweisung ist ja auskommentiert ;-)
Gast #2873885
kannst du mir sagen, wie ich einen Ausgang auf "1" schalten kann?
bin totaler Anfänger und brauch ne kleine Starthilfe.
brauch solangsam mal ein Erfolgserlebnis :-)
Gast #2873923
muss ich irgendwo noch einen Jumper umsetzen?
hab es nun wie folgt programmiert:

#include <avr/io.h>

int main (void) {

   // PC0 als Ausgang setzen
   DDRC  = (1<<PC0);
   PORTC |= (1<<PC0); // einschalten
   //PORTC &= ~(1<<PC0); // ausschalten


   while(1) {
       // Hier könnte noch mehr Quelltext stehen

   }
   return 0;

}

allerdings bekomm ich den Port nie auf "1"
muss ich es innerhalb von der while schleife machen? denke aber eher 
nicht da dort oben der Port auf "1" gesetzt wird. die while - schleife 
dient doch nur dazu dass das programm nicht wieder von vorne anfängt 
oder nicht?
hab ich den Ausgang falsch deklariert? ich denke fast dass der Ausgang 
als Eingang deklariert ist so wie ich das gelesen habe
Gast #2873960
warum Pin 12? Port PC0 geht doch auf Pin 2
wie programmierst du ihn, mit einem externen Programmer oder auch über 
die ISP-Schnittstelle?

ich mach es mit Eclipse. es erscheinen auch keine Fehlermeldungen, dass 
irgendwas nicht gehen sollte, siehe:



Launching /usr/bin/avrdude -pm32 -cavrisp2 -Pusb -Uflash:w:AVR.hex:a
Output:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x1e9502
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: current erase-rewrite cycle count is -1062731686 (if being 
tracked)
avrdude: erasing chip
avrdude: reading input file "AVR.hex"
avrdude: input file AVR.hex auto detected as Intel Hex
avrdude: writing flash (310 bytes):

Writing | ################################################## | 100% 
0.11s

avrdude: 310 bytes of flash written
avrdude: verifying flash memory against AVR.hex:
avrdude: load data flash data from input file AVR.hex:
avrdude: input file AVR.hex auto detected as Intel Hex
avrdude: input file AVR.hex contains 310 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.09s

avrdude: verifying ...
avrdude: 310 bytes of flash verified

avrdude done.  Thank you.

avrdude finished
#2873992
Fabian schrieb:
> ich mess Pin2 gegen Masse
>
> das erbrachte auch nicht den gewünschten Erfolg : DDRC |= (1<<PC0);
> was bedeutet denn das?

Miss doch mal direkt von PC0 nach Masse am uC.

Wenn du den AVRISP mkII mit dem Board verbindest, hast du die grüne LED 
am AVRISP mkII leuchten? Oder leuchtet da irgendwas rot/orange?
Wobei, wenn du beim AVRISP mkII irgendwas verpolt hast, wirst du 
sicherlich nicht erfolgreich mit avrdude flashen können :)
#2873993
Alex A. schrieb:
>Ach ja, schreib mal für DDRC:
>DDRC |= (1<<PC0);

So pauschal kann man das aber nicht sagen!

Fabian schrieb:
>das erbrachte auch nicht den gewünschten Erfolg : DDRC |= (1<<PC0);
>was bedeutet denn das?

Der Inhalt des Registers "DDRC" wird gelesen und dann per ODER mit 
00000001 verknüpft.
Vorteil: Es wird nur das "gewünschte" Bit verändert, alle anderen Bits 
bleiben so wie sie sind.
Der Unterschied zu deinem Code:
Sollte z. B. der komplette Port irgendwann mal als Ausgang definiert 
worden sein, so ist nach der Anweisung
1
DDRC = (1 << PC0)
 wirklich nur PC0 als Ausgang eingestellt, der Rest ist jetzt als Engang 
konfiguriert.
Gast #2874013
ok, hat leider nicht geklappt, werde aber nochmals alles durchgehen.
ich hoffe, dass das Programm so OK ist, dass ich dies wenigstens 
ausschließen kann:

#include <avr/io.h>

int main (void) {

   // PC0 als Ausgang setzen
   DDRC  = (1<<PC0);
   PORTC |= (1<<PC0); // einschalten
   //PORTC &= ~(1<<PC0); // ausschalten


   while(1) {
       // Hier könnte noch mehr Quelltext stehen

   }
   return 0;

}
#2874024
So sollte es funktionieren.
Kannst du prüfen, ob vom mega32-Pin 22 Kontakt zu der im Bild markierten 
Stelle besteht?

Sonst lade mal das Programm rein:
1
#include <avr/io.h>
2

3
int main (void) {
4

5
  // PC0 als Ausgang setzen
6
  DDRA  = (1<<PA4);
7
  PORTA |= (1<<PA4); // einschalten
8
  //PORTC &= ~(1<<PC0); // ausschalten
9

10

11
  while(1) {
12
    // Hier könnte noch mehr Quelltext stehen
13

14
  }
15
  return 0;
16

17
}

Auf der Schraubklemmenleiste sollte jetzt ADC1 auf 5 Volt liegen.
#2874190
Nein, ich benutze das Atmel Studio 6.
Ich habe mal dieses Programm hier als HEX-Datei angehängt:
1
#include <avr/io.h>
2

3
int main (void) {
4

5
  
6
  DDRA  = (1<<PA4);
7
  DDRC = ( 1 << PC0);
8
  PORTA = (1<<PA4);
9
  PORTC = (1 << PC0);
10
  
11

12

13
  while(1) {
14
    asm("NOP");
15

16
  }
17
  
18

19
}

Lade es mal mit avrdude auf deinen mega32.
So können wir zumindest mal die Hardware testen.
(PC0 und ADC1 auf der Schraubklemme führen jetzt 5 Volt)
Angehängte Dateien:
Gast #2874218
ok, lade mir gerade das Atmel Studio 6 herunter.
Hardware kann ich fast ausschließen, da ich zwischenzeitlich ein zweites 
angeschlossen habe, da treten aber die gleichen Probleme auf.
Gast #2874245
:100000000C942A000C9447000C9447000C94470071
:100010000C9447000C9447000C9447000C94470044
:100020000C9447000C9447000C9447000C94470034
:100030000C9447000C9447000C9447000C94470024
:100040000C9447000C9447000C9447000C94470014
:100050000C94470011241FBECFE5D8E0DEBFCDBF12
:1000600010E0A0E6B0E0E6E3F1E002C005900D92FA
:10007000A036B107D9F710E0A0E6B0E001C01D92AC
:10008000A036B107E1F70E9477000C9499000C9418
:100090000000DF93CF9300D000D000D0CDB7DEB703
:1000A0009E838D838D819E819C838B8313C083E38C
:1000B00090E09A83898305C089819A8101979A8308
:1000C000898389819A810097B9F78B819C810197F7
:1000D0009C838B838B819C81009749F726960FB672
:1000E000F894DEBF0FBECDBFCF91DF910895DF93AF
:1000F000CF93CDB7DEB7A1E3B0E0E1E3F0E08081DC
:1001000080648C93A2E3B0E0E2E3F0E0808180645D
:100110008C9388EE93E00E944900A2E3B0E0E2E312
:10012000F0E080818F7B8C9388E491E70E94490006
:06013000E9CFF894FFCFB7
:00000001FF
Gast #2874356
so, habe nun das Atmel Studio 6 installiert.
musste gleich ein Firmware update von meinem Amtmel mk2 machen.
nachdem ich das Programm compiliert habe und auf den Microcontroller 
geschoben, war zwar immer noch kein besseres Ergebnis da aber das jetzt 
entstandene hex file sieht so aus:

:100000000C942A000C9447000C9447000C94470071
:100010000C9447000C9447000C9447000C94470044
:100020000C9447000C9447000C9447000C94470034
:100030000C9447000C9447000C9447000C94470024
:100040000C9447000C9447000C9447000C94470014
:100050000C94470011241FBECFE5D8E0DEBFCDBF12
:1000600010E0A0E6B0E0EEE9F0E002C005900D92ED
:10007000A036B107D9F710E0A0E6B0E001C01D92AC
:10008000A036B107E1F70E9449000C944D000C9492
:0E009000000080E18ABBDC9AFFCFF894FFCF1E
:00000001FF
#2874375
Dieses Programm konfiguriert PA4 als Ausgang und gibt dann high-Pegel 
aus.
Um es auch wirklich zu kontrollieren (ist ja schon spät) habe ich es 
auch aufs NETIO gebrannt: Funktioniert.
Es gibt also mit deiner Hardware irgendwo Probleme.
Gast #2874454
kann es sein dass es was mit dem Bootloader etc zu tun hat?
vor ca 6Monaten hatte ich schon einmal an dem Port einen Ausgang auf "1" 
gesetzt. ich geh jetzt mal davon aus, dass der Atmel mk2 funktioniert. 
was anderes kann ich aus den Übertragungsmeldungen nicht heraus lesen. 
Naja, werde es mir nach der Arbeit nochmals anschauen.
Gast #2875580
Hallo zusammen,

ich konnte nun den Ausgang mit diesem Beispiel auf "1" setzen.
#include <avr/io.h>

int main (void) {


  DDRA  = (1<<PA4);
  DDRC = ( 1 << PC0);
  PORTA = (1<<PA4);
  PORTC = (1 << PC0);



  while(1) {
    asm("NOP");

  }


}


leider hab ich nichts gemacht, nur das Programm nochmals auf den 
Controller geschoben, wie gestern schon.

so, jetzt wollte ich de Port wieder auf "0" setzen was ich aber nicht 
hinbekommen habe, jetzt kann es sein dass ich ein Fehler gemacht habe 
oder aber das was mit meinem Programmer nicht stimmt, dass er einen 
Macken hat etc...

so wollte ich den Port auf "0" setzen:

#include <avr/io.h>

int main (void) {


  DDRA  = (1<<PA4);
  PORTA &= ~(1<<PA4); // ausschalten

  while(1) {
    asm("NOP");

  }


}

kann mir jemand sagen ob ich was falsch mache oder ob mein Programmer 
einen macken hat? vielen Dank
#2875928
Die Programme sind soweit richtig.
Es stellt sich aber die Frage, welchen Portpin du jetzt genau 
einschalten willst?
Im ersten Programm schaltest du PA4 und PC0 ein, im zweiten wird PA4 
aktiv auf GND gelegt.
Wie misst du denn?
#2876451
Da das jetzt irgendwie nur noch rumstochern im Nebel ist, würde ich den 
Fabian bitten: Lade das von dir hier eingestellte Programm, welches PA4 
und PC0 einschaltet, auf den mega32. Dann schaust du im Datenblatt des 
mega32 nach, welche entsprechenden Pins das sind. Dann misst du DIREKT 
am Controllerpin die Spannung bezogen auf GND nach.
Ich meine dieses Programm:
1
     #include <avr/io.h>
2

3
int main (void) {
4

5

6
  DDRA  = (1<<PA4);
7
  DDRC = ( 1 << PC0);
8
  PORTA = (1<<PA4);
9
  PORTC = (1 << PC0);
10

11

12

13
  while(1) {
14
    asm("NOP");
15

16
  }
17

18

19
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.