Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Christian, > > Du verwendest mit " " eine Konstante und keine Variable. > Die Routine erwartet aber einen Bytepufferzeiger. > > Ich habe eine schnellere PCFLCD.C2 Routine angehängt. > Für ein schnelles löschen solltest Du diese erweitern. > ( 20 x blank ausgeben ) > Der Zugriff auf Bytepuffervariablen ist extrem langsam !!! > > Mfg, > Willi aus Oelde > > > /******************************************************************/ > /* Treiberbibliothek fuer ext. LCD am I²C-Bus im 4-Bit Mode */ > /* und PCF-LCD-Interface von http://cctools.hs-control.de */ > /* Author : André Helbig (andre.h@cc2net.de / www.CC2Net.de) */ > /* Versionen : 1.3 Test Willi 21.1.2003 */ > /* Datum : 3. August 2002 */ > /* Geändert : Kontinuierlich ....... */ > /* Getestet : naja */ > /* Benötigt : i2c.c2 */ > /******************************************************************/ > /* Neu in V1.3 */ > /* Capture eingefügt */ > /* */ > /******************************************************************/ > /* P0 = RS */ > /* P1 = R/W */ > /* P2 = E */ > /* P3 = LCD-Light */ > /* P4-7= Data */ > /******************************************************************/ > byte PCF ; > byte light ; > // Betriebsbits setzen > byte En,Mode,Enz,Modez; > byte Enc; > > // const Enable=0b100; //Don&#39;t change !! > > const Line3 =0x94; // Für 4x20 LCD > const Line4 =0xD4; // Für 4x20 LCD > const Line[]= 0x80,0x80,0xC0,0x94,0xD4; // für 4x20 LCD > > //const chars_per_line=20;// Für 4x20 LCD > //const Line3 =0x90; // Für 4x16 LCD > //const Line4 =0xD0; // Für 4x16 LCD > //const Line[]= 0x80,0x80,0xC0,0x90,0xD0; // für 4x16 LCD > //const chars_per_line=16;// Für 4x16 LCD > > /*************************************/ > /* Baustein auswählen */ > /* (für Mehr-Display-Betrieb) */ > /* 0-7 PCF8574; 8-15 PCF8574A */ > /*************************************/ // Lohnt sich nicht zu verbessern ! > function setpcf(byte pcfnr) > { > if pcfnr &gt; 7 PCF=((pcfnr+16) shl 1)or 64; > else PCF=(pcfnr shl 1) or 64; > } > /*************************************/ > /* LCD-Beleuchtung ein/ausschalten */ > /*************************************/ // Lohnt sich nicht zu verbessern ! > function setLight(byte state) > {capture i2c.flag ; > light = (state!=0) and 8 ; > i2c.start (PCF) ; > i2c.write (light) ; > i2c.stop () ; > > Enz =light or 0b00110101 ; // Für Zahlen > Modez =light or 0b00110001 ; > Enc =light or 0b00000100 ; // Für Command ?? > En =light or 0b00000101 ; > Mode =light or 0b00000001 ; > > release ; > } > > /*************************************/ > /* Byte im 4-Bit-Mode zum LCD senden */ > /*************************************/ // Nur von Line verwendet !! > function Write_4_Bit(byte a, byte mode) > { > mode=mode or light ; > capture i2c.flag ; > i2c.start(PCF) ; > i2c.write((a & 0xF0) or mode or 0b100); > i2c.write((a & 0xF0) or mode) ; > i2c.write((a shl 4) or mode or 0b100); > i2c.write((a shl 4) or mode) ; > i2c.stop() ; > release; > } > /*************************************/ > /* Befehl an LCD senden */ > /*************************************/ > function WriteCommand ( byte command ) > {capture i2c.flag; > i2c.start(PCF) ; > i2c.write((command & 0xF0) or Enc ); // ?? > i2c.write((command & 0xF0) or light); // ?? > i2c.write((command shl 4) or Enc ); > i2c.write((command shl 4) or light); > i2c.stop(); > release; > } > /*************************************/ > /* Display löschen */ > /*************************************/ > function clear() > { capture i2c.flag; > i2c.start(PCF); > i2c.write(0x04 or light); > i2c.write( light); > i2c.write(0x14 or light); > i2c.write(0x10 or light); > i2c.stop(); > release; > sleep 2; > } > > /*************************************/ > /* Initialisierung */ // geht nicht !!??? > /*************************************/ > function init() > { capture i2c.flag; > i2c.start(PCF) ; > light=light and 8 ; > i2c.write(light or 0xF0); > //8Bit-Mode > i2c.write(0x30 or light); > i2c.write(0x30 or Enc ); > i2c.write(0x30 or light); > sleep 5; > i2c.write(0x30 or light); > i2c.write(0x30 or Enc ); > i2c.write(0x30 or light); > sleep 5; > i2c.write(0x30 or light); // zus. > i2c.write(0x30 or Enc ); > i2c.write(0x30 or light); > sleep 5; > //4Bit-Mode > i2c.write(0x20 or light); > i2c.write(0x20 or Enc ); > i2c.write(0x20 or light); > sleep 5; > //Funtions-Set > i2c.write(0x20 or light); > i2c.write(0x20 or Enc ); > i2c.write(0x20 or light); > sleep 5; > i2c.write(0x80 or light); > i2c.write(0x80 or Enc ); > i2c.write(0x80 or light); > //Display Control: > i2c.write(Enc ); > i2c.write(light); > i2c.write(0xC0 or Enc ); > i2c.write(0xC0 or light); > //Display Clear: > i2c.write(Enc ); > i2c.write(light); > i2c.write(0x10 or Enc ); > i2c.write(0x10 or light); > sleep 3; > //Entry-Mode: > i2c.write(Enc ); > i2c.write(light); > i2c.write(0x60 or Enc ); > i2c.write(0x60 or light); > release; > } > > /*************************************/ > /* Schreibt ein Zeichen auf LCD */ // modifiziert 20.1.2002 > /*************************************/ > function put( byte a ) > {capture i2c.flag ; > i2c.start(PCF) ; > i2c.write((a & 0xF0) or En) ; > i2c.write((a & 0xF0) or Mode) ; > i2c.write((a shl 4) or En) ; > i2c.write((a shl 4) or Mode) ; > i2c.stop() ; > release; > } > > /***********************************/ > /* writes a string to lcd */ > /* sets the mode to DataMode */ > /***********************************/ > function print( byte s[] ) > {byte a; > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > for a=0 ... s[31]-1 > { > i2c.write((s[a] & 0xF0) or En ); > i2c.write((s[a] & 0xF0) or Mode); > i2c.write((s[a] <<4) or En ); > i2c.write((s[a] <<4) or Mode); > } > i2c.stop(); > release; > } > /****************************************/ > /* writes a string or byte-array to lcd */ > /****************************************/ > function printlength ( byte s[], byte length ) > {byte a; > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > for a=0 ... length-1 > { > i2c.write((s[a] & 0xF0) or En ); > i2c.write((s[a] & 0xF0) or Mode); > i2c.write((s[a] <<4) or En ); > i2c.write((s[a] <<4) or Mode); > } > i2c.stop(); > release; > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ > /* Leerzeichen ausgeben */ > /*************************************/ > function blank() > {i2c.write((0b00100101) or light); // Leerzeichen > i2c.write((0b00100001) or light); > i2c.write(En ); > i2c.write(Mode ); > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ > /* Null ausgeben */ > /*************************************/ > function Null() > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ > /*************************************/ > function Minus() > {i2c.write((0b00100101) or light); // "-" > i2c.write((0b00100001) or light); > i2c.write((0b11010101) or light); > i2c.write((0b11010001) or light); > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ // Für Zeitaugaben > /*************************************/ // ohne Beleuchtung > function Doppel_alt() > {i2c.write((0b00110101) or light); // ":" > i2c.write((0b00110001) or light); > i2c.write((0b10100101) or light); > i2c.write((0b10100001) or light); > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ // Für Zeitaugaben > /*************************************/ > function Doppel() > {i2c.write(Enz) ; // ":" > i2c.write(Modez) ; > i2c.write((0b10100101) or light); > i2c.write((0b10100001) or light); > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ > /*************************************/ > function Komma() > {i2c.write((0b00100101) or light); // "," > i2c.write((0b00100001) or light); > i2c.write((0b11000101) or light); > i2c.write((0b11000001) or light); > } > > /*************************************/ > /* Wird von den Zahl-Funkt. benötigt */ > /* Ziffern 0-9 */ > /*************************************/ > function ziffd(byte x) > { > i2c.write (Enz) ; > i2c.write (Modez); > i2c.write((x shl 4) or En ); > i2c.write((x shl 4) or Mode ); > } > > /*************************************/ > /* Datum ausgeben(byte) */ > /*************************************/ > function datum() > {byte zahl; > zahl = system.hour(); > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl &gt;9 ziffd(zahl/10); else Null(); // blank(); > ziffd(zahl % 10 ); > Doppel(); > zahl = system.minute(); > if zahl &gt;9 ziffd(zahl/10); else Null(); // blank(); > ziffd(zahl % 10 ); > Doppel(); > zahl = system.second(); > if zahl &gt;9 ziffd(zahl/10); else Null(); // blank(); > ziffd(zahl % 10 ); > i2c.stop(); > release; > } > > /*************************************/ > /* Zeit ausgeben(byte) */ // Geht mit und ohne Beleuchtung ! > /*************************************/ > function Zeit() > {byte x; > > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01); > Minus(); > if system.hour() &gt;9 > {x =(system.hour()/10) shl 4; > i2c.write(Enz ); > i2c.write(Modez ); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez ); > i2c.write(En ); > i2c.write(Mode ); > } > > i2c.write(Enz ); > i2c.write(Modez ); > x =(system.hour()%10) shl 4; > i2c.write(x or En ); > i2c.write(x or Mode ); > > Doppel(); > > if system.minute() &gt;9 > {x =(system.minute()/10) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > x =(system.minute() % 10 ) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > > Doppel(); > > if system.second() &gt;9 > {x =(system.second()/10) shl 4; > i2c.write(Enz ); > i2c.write(Modez ); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > x =(system.second()%10) shl 4; > i2c.write(Enz ); > i2c.write(Modez ); > i2c.write(x or En ); > i2c.write(x or Mode ); > Minus(); > > i2c.stop(); > release; > } > > /*************************************/ > /* Datum ausgeben */ // geht mit und ohne Beleuchtung > /*************************************/ > function Datum() > {byte zahl,x; > > zahl = system.day(); > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01); > > // Minus(); > i2c.write((0b00100101) or light); // "-" > i2c.write((0b00100001) or light); > i2c.write((0b11010101) or light); > i2c.write((0b11010001) or light); > > if zahl &gt;9 > {x =(zahl / 10 ) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > x =(zahl % 10 ) shl 4; > i2c.write(Enz ); > i2c.write(Modez ); > i2c.write(x or En ); > i2c.write(x or Mode ); > > // Minus(); > i2c.write((0b00100101) or light); // "-" > i2c.write((0b00100001) or light); > i2c.write((0b11010101) or light); > i2c.write((0b11010001) or light); > > > zahl = system.month(); > if zahl &gt;9 > {x =(zahl / 10 ) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > x =(zahl % 10 ) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > > Minus(); > zahl = system.year()-2000; > if zahl &gt;9 > {x =(zahl / 10 ) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > x =(zahl % 10 ) shl 4; > i2c.write(Enz ); > i2c.write(Modez ); > i2c.write(x or En ); > i2c.write(x or Mode ); > > i2c.write((0b00100101) or light); // "-" > i2c.write((0b00100001) or light); > i2c.write((0b11010101) or light); > i2c.write((0b11010001) or light); > i2c.stop(); > > release; > } > > /*************************************/ > /* Datum ausgeben / weniger Code */ // geht mit und ohne Beleuchtung > /*************************************/ > function Z1(byte zahl) > {byte x; > > if zahl &gt;9 > {x =(zahl / 10 ) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {i2c.write(Enz ); // "0" > i2c.write(Modez); > i2c.write(En ); > i2c.write(Mode ); > } > x =(zahl % 10 ) shl 4; > i2c.write(Enz ); > i2c.write(Modez ); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > function Datum_1() > {capture i2c.flag; > i2c.start(PCF); i2c.write(0x01); > Minus(); Z1(system.day()); > Minus(); Z1(system.month()); > Minus(); Z1(system.year()-2000); > Minus(); i2c.stop(); > release; > } > > > /*************************************/ > /* 2-stellige Zahl ausgeben(byte) */ // führende 0 > /*************************************/ > function zahl2(byte zahl) > {capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl &gt;9 ziffd(zahl/10); else Null(); // blank(); > ziffd(zahl % 10 ); > i2c.stop(); > release; > } > /*************************************/ > /* Byte-Zahl ausgeben(3 Stellen) */ > /*************************************/ > function zahl3(byte zahl) > { > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl &gt;99 ziffd(zahl/100 ) ; else blank(); > if zahl &gt; 9 ziffd((zahl % 100)/10 ); else blank(); > ziffd(zahl % 10); > i2c.stop(); > release; > } > /**************************************/ > /* 3-stellige Zahl ausgeben(pos & neg)*/ > /* byte & Integer (Format:-99 bis 999)*/ > /**************************************/ > function zahl3n(int zahl) > { > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl &gt;99 ziffd(zahl/100 ); > else > if zahl & 0x8000 > {Minus(); > zahl=(not zahl) + 1;} > else blank(); > if zahl &gt;9 ziffd((zahl % 100)/10 ); else blank(); > ziffd(zahl % 10 ); > i2c.stop(); > release; > } > function zahl4(byte zahl) > { > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl &gt;999 ziffd( zahl / 1000 ); else blank(); > if zahl &gt; 99 ziffd( zahl % 1000/100 ); else blank(); > if zahl &gt; 9 ziffd((zahl % 100)/ 10 ); else blank(); > ziffd(zahl % 10 ); > i2c.stop(); > release; > } > /**************************************/ > /* Integer-Zahl ausgeben (nur positiv)*/ > /**************************************/ > function zahlp(int zahl) > { > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl &gt;9999 ziffd( zahl / 10000 ); else blank(); > if zahl &gt; 999 ziffd((zahl % 10000)/1000 ); else blank(); > if zahl &gt; 99 ziffd((zahl % 1000)/ 100 ); else blank(); > if zahl &gt; 9 ziffd((zahl % 100)/ 10 ); else blank(); > ziffd(zahl % 10 ); > i2c.stop(); > release; > } > > /**************************************/ > /* Integer-Zahl ausgeben (pos & neg) */ // mod. mit & ohne Beleuchtung > /* Format: -32768 bis 32767 */ > /**************************************/ > function zahl(int zahl) > {byte x; > > capture i2c.flag ; > i2c.start(PCF) ; > i2c.write(0x01) ; > > if zahl & 0x8000 > {Minus() ; > zahl=(not zahl)+1; > } > else > blank(); > > if zahl &gt; 9999 > {x = (zahl/10000) shl 4; > i2c.write (Enz ) ; > i2c.write (Modez ) ; > i2c.write (x or En ) ; > i2c.write (x or Mode) ; > } > else > {blank(); > } > // ----1000er Stelle ----- > if zahl &gt; 999 > {x = ((zahl % 10000)/1000 )shl 4 ; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {blank(); > } > // ----100er Stelle ----- > if zahl &gt; 99 > {x = ((zahl % 1000)/100 )shl 4 ; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > {blank(); > } > // ----10er Stelle ----- > if zahl &gt; 9 > {x = ((zahl % 100)/10) shl 4; > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > } > else > { blank(); > } > // -- letzte Ziffer ---- > x = (zahl % 10) shl 4; > // oder ziffd > i2c.write (Enz ); > i2c.write (Modez); > i2c.write(x or En ); > i2c.write(x or Mode ); > > i2c.stop(); > release; > } > > /**************************************/ > /* Integer-Zahl ausgeben (pos & neg) */ > /* Format: -32768 bis 32767 */ //leicht modifiziert Willi > /**************************************/ > function zahlalt(int zahl) > { > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if zahl & 0x8000 > {Minus();zahl=(not zahl) + 1;} > else > blank(); > if zahl &gt;9999 ziffd (zahl /10000 ); else blank(); > if zahl &gt; 999 ziffd((zahl % 10000)/1000 ); else blank(); > if zahl &gt; 99 ziffd((zahl % 1000) / 100 ); else blank(); > if zahl &gt; 9 ziffd((zahl % 100) / 10 ); else blank(); > ziffd(zahl % 10 ); > i2c.stop(); > release; > } > /*************************************/ > /* formatierte Zahlausgaben */ > /* Format: ##0,0 (-99,9 - 999,9) */ > /* -999 - 9999 entspr. -99,9 - 999,9 */ > /*************************************/ > function zahl4n1(int num) > { > capture i2c.flag; > i2c.start(PCF); > i2c.write(0x01 or light); > if num&gt;999 ziffd(num /1000 ); > else if num & 0x8000 > {Minus();num=(not num) + 1;} > else > blank(); > if num&gt;99 ziffd((num % 1000)/ 100 ); else blank(); > ziffd((num % 100) / 10 ); > Komma(); > ziffd(num % 10 ); > i2c.stop(); > release; > } > > /***********************************/ > /* Cursor position */ > /***********************************/ > function home() > { WriteCommand(0x02); > sleep 1; > } > function line1() > { WriteCommand(0x80);} > function line2() > { WriteCommand(0xC0);} > > function line1a() // modifiziert > { > capture i2c.flag ; > i2c.start(PCF) ; > i2c.write(0x84 or light); > i2c.write(0x80 or light); > i2c.write(0x04 or light); > i2c.write(0x00 or light); > i2c.stop(); > release; > } > function line2a() // modifiziert > { > capture i2c.flag ; > i2c.start(PCF) ; > i2c.write(0xC4 or light); > i2c.write(0xC0 or light); > i2c.write(0x04 or light); > i2c.write(0x00 or light); > i2c.stop(); > release; > } > function line3() > { WriteCommand(Line3); > } > function line4() > { WriteCommand(Line4); > } > > function line4a() // von Willi modifiziert > { > capture i2c.flag; > i2c.start(PCF) ; > i2c.write(0xD4 or light); > i2c.write(0xD0 or light); > i2c.write(0x44 or light); > i2c.write(0x40 or light); > i2c.stop(); > release; > } > > function line(byte line)// 1 bis 4 > { Write_4_Bit(Line[line],0); > } > > function goto(byte line, byte col) // line = 1 bis 4, col =0 bis 19 > { Write_4_Bit(Line[line]+col,0); > } > > /***********************************/ > /* Cursor/Display-Schieben */ > /***********************************/ > function move(byte dispcur, byte RL) //dispcur=0:Cursor,dispcur=1:Display; > // RL=0:Links,RL=1:Rechts > { WriteCommand(0x10 or (dispcur shl 3) or (RL shl 2) ); > } > /***********************************/ > /* Cursor-Eigenschaften */ > /***********************************/ > function cursorset(byte show, byte blink) > { WriteCommand(0x0C or (show shl 1) or blink ); > } > /***************************************/ > /* Display ausshalten */ > /* Einschalten mit Cursor-Eigenschaften*/ > /***************************************/ > function LCDoff() > {WriteCommand(0x08);}
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB